2017-09-20 3 views
1

Google의 새로운 Play Billing Library 1.0을 구현하려고하는데 연결이 끊어 질 수 있습니다. 그것은 오래된 Trivial Drive 클래스와 함께 작업했습니다.Play 빌링 라이브러리 1.0 - 연결 없음

난 항상 얻을 응답 코드 = 3/I는 구글 플레이에서 알파 테스터로 다운로드 실제 장치에서 응용 프로그램을 실행

사용할 수 없습니다. 아이디어가 있으십니까?

public BillingManager(Activity activity, final BillingUpdatesListener updatesListener) { 
    mActivity = activity; 
    mBillingUpdatesListener = updatesListener; 
    mBillingClient = BillingClient.newBuilder(mActivity).setListener(this).build(); 

    startServiceConnection(new Runnable() { 
     @Override 
     public void run() { 
      mBillingUpdatesListener.onBillingClientSetupFinished(); 
      queryPurchases(); 
     } 
    }); 
} 

public void startServiceConnection(final Runnable executeOnSuccess) { 
    mBillingClient.startConnection(new BillingClientStateListener() { 
     @Override 
     public void onBillingSetupFinished(@BillingClient.BillingResponse int responseCode) { 
      if (responseCode == BillingClient.BillingResponse.OK) { 
       mIsServiceConnected = true; 
       if (executeOnSuccess != null) { 
        executeOnSuccess.run(); 
       } 
      } 
      mBillingClientResponseCode = responseCode; 
     } 

     @Override 
     public void onBillingServiceDisconnected() { 
      mIsServiceConnected = false; 
     } 
    }); 
} 

public void initiatePurchaseFlow(final String skuId, final ArrayList<String> oldSkus, final @BillingClient.SkuType String billingType) { 
    Runnable purchaseFlowRequest = new Runnable() { 
     @Override 
     public void run() { 
      BillingFlowParams.Builder mParams = BillingFlowParams.newBuilder().setSku(skuId).setType(billingType).setOldSkus(oldSkus); 
      mBillingClient.launchBillingFlow(mActivity, mParams.build()); 
     } 
    }; 
    executeServiceRequest(purchaseFlowRequest); 
} 

private void executeServiceRequest(Runnable runnable) { 
    if (mIsServiceConnected) { 
     runnable.run(); 
    } else { 
     startServiceConnection(runnable); 
    } 
} 

@Override 
public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) { 
    if (responseCode == BillingClient.BillingResponse.OK) { 
     for (Purchase purchase : purchases) { 
      handlePurchases(purchase); 
     } 
     mBillingUpdatesListener.onPurchasesUpdated(mPurchases); 
    } else if (responseCode == BillingClient.BillingResponse.USER_CANCELED) { 

    } else { 

    } 
} 

}

편집 : 문제는 내가 ArrayList를 oldSkus로 null을 전달하는 것이였다. 낡은 Skus가 없다면 다른 사람이 무엇을 건지 말해 줄 수 있습니까? 그것은 .setOldSkus를 제거하면 작동하지만, 여전히 올바른 접근 방법이 무엇인지 알고 싶습니다.

+0

하고 그것이 잘 작동, 당신의 skuId 구글의 제품 ID가 연주 일치인가? –

+1

이봐 요, 그 이유는 단순히 에뮬레이터에서 실행했기 때문입니다 ... –

답변

1

에뮬레이터를 사용하는 경우 먼저 Google Play 서비스를 사용하도록 설정했는지, Play 스토어 앱이 설치되어 있으며 앱을 구매할 수 있는지 확인하시기 바랍니다. 하지만 실제 기기에서 Play 결제와 통합하는 것이 훨씬 쉽습니다.

Play 빌링 라이브러리는 모든 개발자 오류 (예 : setOldSkus 메서드의 문제 포함)에 대해 자세한 정보를 제공합니다. BillingClient 내부의 권장 로그를 활성화하십시오.

예컨대 :

adb shell setprop log.tag.BillingClient VERBOSE 
내가 oldSkus에 null을 전달
+0

그래, 에뮬레이터 였어. 그것은 전혀 작동하지 않는 것 같습니다. –