Доступ к аналитическим данным с помощью служб Магазина

Используйте API аналитики Microsoft Store для программного получения аналитических данных для приложений, зарегистрированных в вашей учетной записи Центра партнеров Windows или вашей организации. Этот API позволяет извлекать данные о приобретении, ошибках, оценках и отзывов для приложения и надстройки (внутреннего продукта или IAP). Для проверки подлинности вызовов из приложения или службы в этом интерфейсе используется служба Azure Active Directory (Azure AD).

Далее описан весь процесс.

  1. Убедитесь, что вы выполнили все необходимые условия.
  2. Перед вызовом метода в API аналитики для Microsoft Storeполучите маркер доступа Azure AD. После получения маркера доступа у вас будет 60 минут, чтобы использовать его в вызовах к API аналитики для Microsoft Store до окончания срока действия маркера. После истечения срока действия маркера можно сформировать новый маркер.
  3. Вызов API аналитики для Microsoft Store.

Шаг 1. Выполнение необходимых условий для использования API аналитики для Microsoft Store

Перед тем как начать писать код для вызова API аналитики для Microsoft Store, убедитесь, что вы выполнили следующие необходимые условия.

  • У вас (или вашей организации) должен иметься каталог Azure AD, а также у вас должен быть доступ уровня глобального администратора к этому каталогу. Если вы уже используете Microsoft 365 или другие бизнес-службы Microsoft, у вас уже есть каталог Azure AD. В противном случае вы можете создать новую Azure AD в Центре партнеров без дополнительной платы.

  • Необходимо связать Azure AD приложение с учетной записью Центра партнеров, получить идентификатор клиента и идентификатор клиента для приложения и создать ключ. Приложение Azure AD представляет собой приложение или службу, из которой отправляются вызовы в API аналитики для Microsoft Store. Для получения маркера доступа Azure AD, передаваемого в API, необходимы идентификатор арендатора, идентификатор и ключ клиента.

    Примечание

    Эту операцию необходимо выполнить только один раз. После получения идентификатора арендатора, идентификатора и ключа клиента их можно повторно использовать в любой момент, когда потребуется создать новый маркер доступа Azure AD.

Чтобы связать приложение Azure AD с учетной записью Центра партнеров и получить необходимые значения:

  1. В Центре партнеров свяжите учетную запись Центра партнеров своей организации с каталогом Azure AD организации.

  2. Затем на странице Пользователи в разделе Параметры учетной записи Центра партнеров добавьте приложение Azure AD, представляющее приложение или службу, которые будут использоваться для доступа к аналитическим данным для учетной записи Центра партнеров. Убедитесь, что этому приложению назначена роль Менеджер. Если приложение еще не существует в каталоге Azure AD, можно создать новое приложение Azure AD в Центре партнеров.

  3. Вернитесь на страницу Пользователи, щелкните имя приложения Azure AD, чтобы перейти к параметрам приложения, и скопируйте идентификатор арендатора и идентификатор клиента.

  4. Щелкните Добавить новый ключ. На следующем экране скопируйте значение в поле Ключ. Покинув эту страницу, вы больше не сможете получить доступ к этим сведениям. Дополнительные сведения см. в разделе Управление ключами для приложения Azure AD.

Шаг 2. Получение маркера доступа Azure AD

Перед тем как можно будет вызвать любой из методов в API аналитики для Microsoft Store, сначала необходимо получить маркер доступа Azure AD и передать его в заголовок Авторизация каждого метода в API. После получения маркера доступа у вас будет 60 минут, чтобы использовать его до истечения срока действия. После истечения срока действия маркера вы можете обновить его, чтобы дальше использовать в последующих вызовах к API.

Для получения маркера доступа следуйте инструкциям в разделе Вызовы между службами с помощью учетных данных клиентов, чтобы отправить HTTP-запрос POST в конечную точку https://login.microsoftonline.com/<tenant_id>/oauth2/token. Ниже приведен пример запроса.

POST https://login.microsoftonline.com/<tenant_id>/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded; charset=utf-8

grant_type=client_credentials
&client_id=<your_client_id>
&client_secret=<your_client_secret>
&resource=https://manage.devcenter.microsoft.com

Для значения tenant_id в URI POST, а также параметров client_id и client_secret укажите идентификатор клиента, идентификатор клиента и ключ для приложения, полученные из Центра партнеров в предыдущем разделе. Для параметра resource укажите значение https://manage.devcenter.microsoft.com.

После истечения срока действия маркера доступа вы можете обновить его, следуя инструкциям, приведенным здесь.

> [!NOTE]
> ResourceType='Graph.windows.net' will be deprecated after September 2023. Please migrate to ResourceType ='Graph.microsoft.com'

Шаг 3. Вызов API аналитики для Microsoft Store

После получения маркера доступа Azure AD вы можете вызвать API аналитики для Microsoft Store. Необходимо передать маркер доступа в заголовок Authorization каждого метода.

Методы для приложений и игр UWP

Для приобретения приложений и игр и надстроек доступны следующие методы:

Методы для приложений UWP

Следующие методы аналитики доступны для приложений UWP в Центре партнеров.

Сценарий Методы
Приобретения, преобразования, установки и использование
Ошибки приложения
Аналитика
Оценки и отзывы
Реклама в приложении и рекламные кампании

Методы для классических приложений

Для учетных записей разработчиков, которые связаны с программой для разработчиков классических приложений для Windows, доступны следующие методы аналитики.

Сценарий Методы
Установки
Blocks
Ошибки приложений
Аналитика

Методы для служб Xbox Live

Доступны следующие дополнительные методы для использования учетными записями разработчиков в играх, использующих службы Xbox Live. API Аналитики Microsoft Store для Xbox больше недоступен. gaming/xbox-live/get-started/join-dev-program/join-dev-program_nav

Сценарий Методы
Общая аналитика

Методы для оборудования и драйверов

Учетные записи разработчиков, принадлежащие программе панели мониторинга оборудования Windows , имеют доступ к дополнительному набору методов получения аналитических данных для оборудования и драйверов. Дополнительные сведения см. в разделе API панели мониторинга оборудования.

Пример кода

В следующем примере кода показано, как получить маркер доступа Azure AD и вызвать API аналитики для Microsoft Store из консольного приложения C#. Чтобы использовать этот пример кода, назначьте переменным tenantId, clientId, clientSecret и appID соответствующие вашему сценарию значения. В этом примере для десериализации данных JSON, возвращаемых API аналитики для Microsoft Store, требуется пакет Json.NET.

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

namespace TestAnalyticsAPI
{
    class Program
    {
        static void Main(string[] args)
        {
            string tenantId = "<your tenant ID>";
            string clientId = "<your client ID>";
            string clientSecret = "<your secret>";

            string scope = "https://manage.devcenter.microsoft.com";

            // Retrieve an Azure AD access token
            string accessToken = GetClientCredentialAccessToken(
                    tenantId,
                    clientId,
                    clientSecret,
                    scope).Result;

            // This is your app's Store ID. This ID is available on
            // the App identity page of the Dev Center dashboard.
            string appID = "<your app's Store ID>";

            DateTime startDate = DateTime.Parse("08-01-2015");
            DateTime endDate = DateTime.Parse("11-01-2015");
            int pageSize = 1000;
            int startPageIndex = 0;

            // Call the Windows Store analytics API
            CallAnalyticsAPI(accessToken, appID, startDate, endDate, pageSize, startPageIndex);

            Console.Read();
        }

        private static void CallAnalyticsAPI(string accessToken, string appID, DateTime startDate, DateTime endDate, int top, int skip)
        {
            string requestURI;

            // Get app acquisitions
            requestURI = string.Format(
                "https://manage.devcenter.microsoft.com/v1.0/my/analytics/appacquisitions?applicationId={0}&startDate={1}&endDate={2}&top={3}&skip={4}",
                appID, startDate, endDate, top, skip);

            //// Get add-on acquisitions
            //requestURI = string.Format(
            //    "https://manage.devcenter.microsoft.com/v1.0/my/analytics/inappacquisitions?applicationId={0}&startDate={1}&endDate={2}&top={3}&skip={4}",
            //    appID, startDate, endDate, top, skip);

            //// Get app failures
            //requestURI = string.Format(
            //    "https://manage.devcenter.microsoft.com/v1.0/my/analytics/failurehits?applicationId={0}&startDate={1}&endDate={2}&top={3}&skip={4}",
            //    appID, startDate, endDate, top, skip);

            //// Get app ratings
            //requestURI = string.Format(
            //    "https://manage.devcenter.microsoft.com/v1.0/my/analytics/ratings?applicationId={0}&startDate={1}&endDate={2}top={3}&skip={4}",
            //    appID, startDate, endDate, top, skip);

            //// Get app reviews
            //requestURI = string.Format(
            //    "https://manage.devcenter.microsoft.com/v1.0/my/analytics/reviews?applicationId={0}&startDate={1}&endDate={2}&top={3}&skip={4}",
            //    appID, startDate, endDate, top, skip);

            HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, requestURI);
            requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

            WebRequestHandler handler = new WebRequestHandler();
            HttpClient httpClient = new HttpClient(handler);

            HttpResponseMessage response = httpClient.SendAsync(requestMessage).Result;

            Console.WriteLine(response);
            Console.WriteLine(response.Content.ReadAsStringAsync().Result);

            response.Dispose();
        }

        public static async Task<string> GetClientCredentialAccessToken(string tenantId, string clientId, string clientSecret, string scope)
        {
            string tokenEndpointFormat = "https://login.microsoftonline.com/{0}/oauth2/token";
            string tokenEndpoint = string.Format(tokenEndpointFormat, tenantId);

            dynamic result;
            using (HttpClient client = new HttpClient())
            {
                string tokenUrl = tokenEndpoint;
                using (
                    HttpRequestMessage request = new HttpRequestMessage(
                        HttpMethod.Post,
                        tokenUrl))
                {
                    string content =
                        string.Format(
                            "grant_type=client_credentials&client_id={0}&client_secret={1}&resource={2}",
                            clientId,
                            clientSecret,
                            scope);

                    request.Content = new StringContent(content, Encoding.UTF8, "application/x-www-form-urlencoded");

                    using (HttpResponseMessage response = await client.SendAsync(request))
                    {
                        string responseContent = await response.Content.ReadAsStringAsync();
                        result = JsonConvert.DeserializeObject(responseContent);
                    }
                }
            }

            return result.access_token;
        }
    }
}

Сообщения об ошибках

API аналитики для Microsoft Store возвращает ошибочные ответы в объекте JSON, который содержит коды ошибок и сообщения. В следующем примере демонстрируется ошибочный ответ, вызванный недопустимым параметром.

{
    "code":"BadRequest",
    "data":[],
    "details":[],
    "innererror":{
        "code":"InvalidQueryParameters",
        "data":[
            "top parameter cannot be more than 10000"
        ],
        "details":[],
        "message":"One or More Query Parameters has invalid values.",
        "source":"AnalyticsAPI"
    },
    "message":"The calling client sent a bad request to the service.",
    "source":"AnalyticsAPI"
}