2014-01-14 2 views
1

Я работаю над приложением Android с покупками приложений в Google Play. У меня также есть серверное приложение (JAVA), работающее в фоновом режиме. Всякий раз, когда пользователь успешно совершает покупку в приложении (покупка работает), серверное приложение должно отправить запрос на игру Google, чтобы проверить покупку.Google androidpublish api access_token

Google Play предлагает в AndroidPublisher API для этого: developers.google.com/android-publisher/getting_started

Проблема заключается в access_token. Всякий раз, когда я получаю новый access_token (либо с обновлением, либо с помощью метода запроса нового токена), он не работает, если я пытаюсь использовать метод GET для запроса информации из пункта покупки inapp из магазина воспроизведения Google (https://developers.google.com/android-publisher/v1/purchases/get) -> это всегда приводит к ошибке 401 (недопустимые учетные данные) или 403 (доступ не настроен).

после бесконечны попыток я узнать, что я только могу получить метод работы с этой ссылкой: https://developers.google.com/apis-explorer/#p/androidpublisher/v1.1/androidpublisher.inapppurchases.get, и я могу только читать действительный access_token оттуда, и только с этой лексемой я могу получить серверное приложение работаю, но только в течение одного часа, после 1 часа я должен сделать такой же шаг снова ...

теперь я действительно нужен правильный путь, чтобы получить действительный access_token с моим приложением

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

ответ

1

Вы можете использовать библиотеки com.google.api-client и google-api-services-androidpublisher.

Сначала зайдите в проект на Google консоли разработчика (https://console.developers.google.com)

  • APIs & Auth -> APIs
  • Enable "Google Play для Android разработчика API"
  • Перейти к мандатной -> Создание нового клиента ID
  • счет Выберите услугу
  • Создать идентификатор клиента
  • Сохранить p1 2 файла в безопасном месте

Затем добавьте только сгенерированный адрес электронной почты для учетной записи службы для вашего Google консоли разработчика игры (https://play.google.com/apps/publish/)

  • Настройки -> Учетные записи пользователей & права -> Пригласить нового пользователя
  • Вставить @developer.gserviceaccount.com учетная запись электронной почты
  • Выберите «Просмотр финансовых отчетов»
  • Отправить приглашение

Теперь код. Добавьте следующие зависимости к вашему pom.XML-файл:

<dependency> 
    <groupId>com.google.api-client</groupId> 
    <artifactId>google-api-client</artifactId> 
    <version>1.18.0-rc</version> 
</dependency> 
<dependency> 
    <groupId>com.google.http-client</groupId> 
    <artifactId>google-http-client-jackson2</artifactId> 
    <version>1.18.0-rc</version> 
</dependency> 
<dependency> 
    <groupId>com.google.apis</groupId> 
    <artifactId>google-api-services-androidpublisher</artifactId> 
    <version>v1.1-rev25-1.18.0-rc</version> 
</dependency> 

Тогда первая проверка подписи:

byte[] decoded = BASE64DecoderStream.decode(KEY.getBytes()); 
KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 
PublicKey publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(decoded)); 
Signature sig = Signature.getInstance("SHA1withRSA"); 
sig.initVerify(publicKey); 
sig.update(signedData.getBytes()); 
if (sig.verify(BASE64DecoderStream.decode(signature.getBytes()))) 
{ 
    // Valid 
} 

Если подпись проверяет выборки подписных детали:

// fetch signature details from google 
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); 
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance(); 
GoogleCredential credential = new GoogleCredential.Builder() 
    .setTransport(httpTransport) 
    .setJsonFactory(jsonFactory) 
    .setServiceAccountId(ACCOUNT_ID) 
    .setServiceAccountScopes(Collections.singleton("https://www.googleapis.com/auth/androidpublisher")) 
    .setServiceAccountPrivateKeyFromP12File(new File("key.p12")) 
    .build(); 

AndroidPublisher pub = new AndroidPublisher.Builder(httpTransport, jsonFactory, credential) 
    .setApplicationName(APPLICATION_NAME) 
    .build(); 
AndroidPublisher.Purchases.Get get = pub.purchases().get(
    APPLICATION_NAME, 
    PRODUCT_ID, 
    token); 
SubscriptionPurchase subscription = get.execute(); 
System.out.println(subscription.toPrettyString()); 

Это будет заботиться о всех вопросах токенов посредством генерирования JWT, чтобы вам не приходилось справляться с этим самостоятельно.

+0

спасибо вам большое, я получил его, работая с вашим кодом :) Что я не понимаю, это код выше, почему вы выполнили проверку, какая «подпись» вы имеете в виду и что такое переменная «KEY», должно быть? – user3193443

Смежные вопросы