1

인앱 결제를 구현하는 코드의 일부입니다. 나는 두 가지 의문을 품는다.인앱 결제 구현 : 확인 된 구매

@Override 
    public void onPurchaseStateChange(PurchaseState purchaseState, String itemId, 
      int quantity, long purchaseTime, String developerPayload) { 
     if (Consts.DEBUG) { 
      Log.i(TAG, "onPurchaseStateChange() itemId: " + itemId + " " + purchaseState); 
     } 

     if (developerPayload == null) { 
      logProductActivity(itemId, purchaseState.toString()); 
     } else { 
      logProductActivity(itemId, purchaseState + "\n\t" + developerPayload); 
     } 

     if (purchaseState == PurchaseState.PURCHASED) { 
      mOwnedItems.add(itemId); 

      // At this point I have to put Premium changes 
     } 
    } 

내 질문 : 당신 드릴 수 있습니다 응용 프로그램을 구입 한 것을 어떻게 "나는 프리미엄 변화를 넣어야 할이 시점에서"말하는 시점에서

  1. ?

  2. 일단 구매가 완료되면이 작업을 수행하는 데 몇 시간이 걸릴 수 있음을 이해했습니다. 내 애플리케이션에서 "현 시점에서 프리미엄 변경 사항을 입력해야합니다"라는 코드가 실행되도록하려면 어떻게해야합니까? 이 블록

    if (purchaseState == PurchaseState.PURCHASED) { 
        ... 
    } 
    

    에 도달하면

답변

0

그런 다음 구매가 성공적으로 알고있다. 내 경험에 비추어 볼 때 구매가 지연되면 2 초가 넘지 않습니다. 그러나 사용자는 확인 전에 앱을 종료 할 수 있습니다.

따라서 restoreTransactions()도 구현해야합니다. 활동이 열릴 때마다 앱이 구매되었는지 여부를 서버와 함께 확인합니다.

/** 
* A {@link PurchaseObserver} is used to get callbacks when Android Market sends 
* messages to this application so that we can update the UI. 
*/ 
private class MyPurchaseObserver extends PurchaseObserver { 
    public DownloaderPurchaseObserver(Handler handler) { 
     super(home, handler); 
    } 

    @Override 
    public void onBillingSupported(boolean supported) { 
     ... 
     yourBillingService.restoreTransactions(); 
     ... 
    } 

    @Override 
    public void onRestoreTransactionsResponse(RestoreTransactions request, 
      ResponseCode responseCode) { 
     if (responseCode == ResponseCode.RESULT_OK) { 
      // repeat your premium validation here 
     } else { 
      if (Consts.DEBUG) { 
       Log.e(TAG, "RestoreTransactions error: " + responseCode); 
      } 
     } 
    } 

} 
+0

NathanZ, 당신의 속도 응답에 대한 감사합니다! 나는 의심이 하나 더있다. 내 문제 : MyBuyActivity.java를 호출 할 때 관련된 청구 서비스를 시작하지만 사용자가 버튼을 클릭하지 않아도 청구 서비스가 시작되지 않습니다. 그런 다음, 그 가격을 환불하면 앱은 항상 프리미엄이됩니다. 내 주요 활동에서 청구 서비스를 호출하려면 어떻게해야합니까? 구매가 효과를 내기까지 몇 시간이 걸리는 경우도 마찬가지입니다 (드문 일이긴하지만). 내 하찮은 영어 실력에 죄송하다는 말씀을 드리고 싶습니다. – Pablo

+0

환불에 대해이 게시물을 참조하십시오 : http://stackoverflow.com/questions/6817507/android-in-app-billing-cancel-payment – znat