2015-09-24 5 views
1

Я не смог найти способ проверить InApp Подписка с тест продукта ID по гугле т.е. private final String productID = "android.test.purchased"; // Test Product ID by GoogleНевозможно проверить в App Подписка

В docs он нигде не написано, что InApp подписка может не быть протестирован с тестовым продуктом или нигде не упоминается, как протестировать подписку InApp.

Я внедрил свой код после docs (InAppV3).

Док говорит:

Реализация подписки: Запуск потока покупки для подписки похож на запуск потока покупки для продукта, за исключением того, что тип продукта должен быть установлен на «подводные лодки». Результат покупки доставляется к методу onActivityResult в вашей деятельности, точно так же, как и в случае продуктов в приложении.

, и я также реализовал это правильно.

Мое приложение работает, если я заменю "InApp" с "подводные лодки", то есть. он отлично работает для продуктов, а не для подписки.

Когда я изменяю «InApp» в «подводные лодки» тогда покупка возвращается:

09-24 14:01:12.943: I/(16929): isBillingSupported() - success : return 0 
09-24 14:01:12.943: D/Finsky(2598): [281] InAppBillingUtils.getPreferredAccount: com.kgandroid.inappsubscriptiondemo: Account from first account - [MOn42QuZgF98vxJi0p3wAN3rfzQ] 
09-24 14:01:12.943: I/(16929): getPurchases() - success return Bundle 
09-24 14:01:12.943: I/(16929): getPurchases() - "RESPONSE_CODE" return 0 
09-24 14:01:12.943: I/(16929): getPurchases() - "INAPP_PURCHASE_ITEM_LIST" return [] 
09-24 14:01:12.943: I/(16929): getPurchases() - "INAPP_PURCHASE_DATA_LIST" return [] 
09-24 14:01:12.943: I/(16929): getPurchases() - "INAPP_DATA_SIGNATURE" return null 
09-24 14:01:12.943: I/(16929): getPurchases() - "INAPP_CONTINUATION_TOKEN" return null 

Как вы можете видеть, никаких подробностей для android.test.purchased является returning.The диалог покупки тест InApp также не открытие.

Соответствующее объявление о покупке код (Хотя это не связано с проблемой я думаю):

void purchase() 
{ 
    if (!blnBind) return; 
    if (mService == null) return; 

    ArrayList<String> skuList = new ArrayList<String>(); 
    skuList.add(productID); 
    Bundle querySkus = new Bundle(); 
    querySkus.putStringArrayList("ITEM_ID_LIST", skuList); 

    Bundle skuDetails; 
    try { 
     skuDetails = mService.getSkuDetails(3, getPackageName(), "subs", querySkus); 
     System.out.println(skuDetails); 
     Toast.makeText(context, "getSkuDetails() - success return Bundle", Toast.LENGTH_SHORT).show(); 
     Log.i(tag, "getSkuDetails() - success return Bundle"); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 

     Toast.makeText(context, "getSkuDetails() - fail!", Toast.LENGTH_SHORT).show(); 
     Log.w(tag, "getSkuDetails() - fail!"); 
     return; 
    } 

    int response = skuDetails.getInt("RESPONSE_CODE"); 
    Toast.makeText(context, "getSkuDetails() - \"RESPONSE_CODE\" return " + String.valueOf(response), Toast.LENGTH_SHORT).show(); 
    Log.i(tag, "getSkuDetails() - \"RESPONSE_CODE\" return " + String.valueOf(response)); 

    if (response != 0) return; 

    ArrayList<String> responseList = skuDetails.getStringArrayList("DETAILS_LIST"); 
    Log.i(tag, "getSkuDetails() - \"DETAILS_LIST\" return " + responseList.toString()); 

    if (responseList.size() == 0) return; 

    for (String thisResponse : responseList) { 
     try { 
      JSONObject object = new JSONObject(thisResponse); 

      String sku = object.getString("productId"); 
      String title = object.getString("title"); 
      String price = object.getString("price"); 

      Log.i(tag, "getSkuDetails() - \"DETAILS_LIST\":\"productId\" return " + sku); 
      Log.i(tag, "getSkuDetails() - \"DETAILS_LIST\":\"title\" return " + title); 
      Log.i(tag, "getSkuDetails() - \"DETAILS_LIST\":\"price\" return " + price); 

      if (!sku.equals(productID)) continue; 

      Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(), sku, "subs", "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ"); 

      Toast.makeText(context, "getBuyIntent() - success return Bundle", Toast.LENGTH_SHORT).show(); 
      Log.i(tag, "getBuyIntent() - success return Bundle"); 

      response = buyIntentBundle.getInt("RESPONSE_CODE"); 
      //Toast.makeText(context, "getBuyIntent() - \"RESPONSE_CODE\" return " + String.valueOf(response), Toast.LENGTH_SHORT).show(); 
      Log.i(tag, "getBuyIntent() - \"RESPONSE_CODE\" return " + String.valueOf(response)); 

      if (response != 0) continue; 

      PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT"); 
      startIntentSenderForResult(pendingIntent.getIntentSender(), 1001, new Intent(), 0, 0, 0); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } catch (RemoteException e) { 
      e.printStackTrace(); 

      //Toast.makeText(context, "getSkuDetails() - fail!", Toast.LENGTH_SHORT).show(); 
      Log.w(tag, "getBuyIntent() - fail!"); 
     } catch (SendIntentException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Имеет ли подписка поддерживает тестовые покупки ?? Если нет, как проверить подписку? Если да, то почему google возвращает null?

Любые связанные документы или ссылки также будут полезны.

+0

Нет, это не поддерживается. Вам нужно создать бета-версию и протестировать ее как бета-пользователя. – greywolf82

+0

Поддерживается альфа-версия ???? – kgandroid

+0

Мне удалось проверить его, добавив два продукта подписки в более совершенную консоль в альфа-версии. Но метод getPurchases всегда возвращает значение null, а в диалоговом окне приложения отображается «Запрошенный товар недоступен для покупки» – kgandroid

ответ

6

Я никогда не пробовал тестировать юниты, используя идентификатор тестового продукта («android.test.purchased»), и я не уверен, что он будет работать, как будто это идентификатор продукта, а не идентификатор подписки. Я использую реальные идентификаторы подписки (которые я создаю в консоли разработчика Google Play), но я использую учетную запись, отличную от моей учетной записи разработчика (т. Е. Тот, который вы используете для публикации приложения).

Если вы перейдете к https://play.google.com/apps/publish/, затем нажмите «Настройки», вы увидите поле «Gmail accounts with testing access». Вы можете ввести один или несколько адресов gmail для учетных записей, с которыми вы хотите проверить свои покупки. Любая учетная запись добавила, что покупки подписки не будут взиматься, а подписка будет длиться 24 часа. (источник: http://developer.android.com/google/play/billing/billing_testing.html и мой собственный опыт)

Это работает для меня. Хотя я, кажется, нашел ошибку: Trying to cancel an Android test subscription gives me a 500 response code

Удачи вам в приложении!

Edit:

от Google Docs (http://developer.android.com/google/play/billing/billing_testing.html#billing-testing-test)

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

Вы пытались использовать другую учетную запись?

+1

Спасибо за ваш ответ. В подписке на приложение не может быть протестировано с помощью тестовые продукты. Вам нужно добавить настоящие подписки и добавить подписанный apk в alpha.После этого вам нужно создать учетную запись google, а затем вы можете протестировать свое приложение. – kgandroid