2013-02-09 5 views
6

앱에서 앱 구매시 구현되었습니다. 버전 3의 인앱 결제에 'TrivialDrive'예를 사용 했으므로 정적 응답을 사용하여 앱을 예상대로 테스트했습니다.결제 후 Android 인앱 구매가 다운 됨

내가 성공 구입 시장, 응용 프로그램 충돌에서 응용 프로그램을 다운로드 할 때

내 코드가 성공적으로 구입이다

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() { 
public void onIabPurchaseFinished(IabResult result, Purchase purchase) { 

    Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase); 
    if (result.isFailure()) { 
    complain("Error purchasing: " + result); 
    } 

    if (purchase != null) { 
    if (purchase.getSku().equals(Constants.IN_APP_PURCHASE_PRODUCT_ID)) { 
     // bought the premium upgrade! 
     String message = getResources().getString(R.string.app_purchase_successful_msg); 
     mIsPremium = true; 
     updateUi(mIsPremium); 
     successAlert(message); 
    } 
    } 
} 
}; 

내가 성공 구매에 메시지를 설정했지만 나는이 메시지를 볼 수 없습니다, (해당 linse가 실행되지 않음을 의미합니다) 성공적으로 결제를하면 응용 프로그램이 충돌합니다.

앱을 다시 실행하고 항목을 구매하려고 시도하면 이미 구입했다고 말합니다.

개발자 콘솔에서 오류 보고서를 받았습니다. onActivityResult를()

if (!mHelper.handleActivityResult(requestCode, resultCode, data)) 

방법은 그것은 내가 때 정적 응답하지만 충돌에 완벽하게 잘 작동이

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data); 

// Pass on the activity result to the helper for handling 
if (!mHelper.handleActivityResult(requestCode, resultCode, data)) { 
    // not handled, so handle it ourselves (here's where you'd 
    // perform any handling of activity results not related to in-app 
    // billing... 
    super.onActivityResult(requestCode, resultCode, data); 
} else { 
    Log.d(TAG, "onActivityResult handled by IABUtil."); 
} 
} 

처럼이 선에 방법에 Null 포인터 예외를 던지는

02-09 02:01:13.181: E/AndroidRuntime(11530): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=10001, result=-1, data=Intent { (has extras) }} to activity {com.eknathkadam.grammaruplite/com.webrich.base.ui.GoogleInAppPurchaseActivity}: java.lang.NullPointerException 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.deliverResults(ActivityThread.java:3141) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3184) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.access$1100(ActivityThread.java:130) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.os.Looper.loop(Looper.java:137) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.main(ActivityThread.java:4745) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at java.lang.reflect.Method.invokeNative(Native Method) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at java.lang.reflect.Method.invoke(Method.java:511) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at dalvik.system.NativeStart.main(Native Method) 
**02-09 02:01:13.181: E/AndroidRuntime(11530): Caused by: java.lang.NullPointerException 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.google.billing.Base64.decode(Base64.java:434)** 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.google.billing.Security.generatePublicKey(Security.java:87) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.google.billing.Security.verifyPurchase(Security.java:66) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.google.billing.IabHelper.handleActivityResult(IabHelper.java:437) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.webrich.base.ui.GoogleInAppPurchaseActivity.onActivityResult(GoogleInAppPurchaseActivity.java:238) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.Activity.dispatchActivityResult(Activity.java:5192) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.deliverResults(ActivityThread.java:3137) 
02-09 02:01:13.181: E/AndroidRuntime(11530): ... 11 more 
02-09 02:02:20.610: E/JavaBinder(250): !!! FAILED BINDER TRANSACTION !!! 
02-09 02:02:20.638: E/MountService(250): Listener dead 
02-09 02:02:20.638: E/MountService(250): Listener dead 
02-09 02:02:22.028: E/InputDispatcher(250): channel '41f313f0 com.android.vending/com.android.vending.AssetBrowserActivity (server)' ~ Channel is unrecoverably broken and will be disposed! 
02-09 02:03:59.884: E/PowerManagerService(250): Excessive delay setting brightness: 198ms, mask=2 

시장에서 구입.

+1

나는 어제부터 동일한 문제에 직면 해있다. 나는 약간의 해결책을 얻을 수 있기를 희망한다. –

+0

어제부터이 문제에 직면 해 있습니다. 왜 – Goofy

+0

@MehulJoisar 언제 앱을 업로드 했습니까? – Goofy

답변

0

정확하게 똑같은 문제에 직면했습니다. 그런 다음 구매 과정에서 전체 활동이 때로는 다시 만들어 짐을 알게되었습니다. 나는 그것이 그 애플 리케이션에서도 발생 하는지를 확인하기 위해 퀴즈 예제를 개별적으로 테스트하지는 않았지만 청구 프로세스 (또는이 예제의 도우미 메소드와 관련되어 있기 때문에 자신의 앱에서 사용하는 것으로 보입니다. 너무).

내 코드의 청구 부분과 퀴즈 예제 간의 유일한 차이점은 특정 이벤트에서 실행 된 메소드에서 mHelper를 인스턴스화하는 것이었지만, 간단한 예제에서는 onCreate에서 인스턴스화하는 것입니다. 그래서 (이제는 onCreate에서 mHelper의 새로운 인스턴스를 만들었습니다.) 모든 것이 올바르게 작동하기 시작했습니다. 것은, 활동이 다시 만들어지면 mHelper가 onCreate에서 다시 인스턴스화되기 때문에 다음 onActivityResult 호출에서 null이 될 수 없습니다.

솔직히 말하면, 왜 활동이 재 작성되었는지, 그리고 활동의 새 인스턴스의 onActivityResult 메소드가 호출 된 이유는 모르지만 모든 것이 이제는 작동하는 것처럼 보입니다.

+0

이상하게 들리 네요! –

+0

예, 이상하게 들리 겠지만 작동하고 문제의 원인이 될 수 있습니다. 나는 그 문제가 In App Billing 그 자체가 아니라 퀴즈 예제의 라이브러리와 관련이 있다고 확신한다. 그래서 원래의 질문에 대한 당신의 의견은 "나는 in-app v3가 아직 안정적이지 못하다고 생각한다."는 말이 없다. 나는 처음에했던 것처럼 @Mac, 질문을 한 사람이 mHelper 인스턴스의 생성을 onCreate 메소드 밖으로 옮겼다면 게시하도록하겠습니다. – thelawnmowerman

+0

ok, 예, 버그, 활동이 있습니다. 확실히 in-app v3 (in-app v3 라이브러리를 의미)에 대한 주석을 작성한 것이지 Google의 전체 인앱 구매 기능에 대한 설명이 아닙니다. –

0

나는 동일한 문제가있었습니다. 내가 발견 한 것은 인앱 구매 상자가 표시되면 onPause 메서드가 내 응용 프로그램 활동에서 실행되고 상자가 닫힐 때 onResume 메서드가 실행된다는 것입니다.

@Override 
public void onPause() 
{ 
    mWakeLock.release(); 
    super.onPause(); 
} 

@Override 
public void onResume() 
{ 
    super.onResume(); 
    mWakeLock.acquire(); 
} 

마지막으로 내가 mWaveLock이 실행되는 줄을 제거 : 이 이러한 방법의 코드입니다.

@Override 
public void onPause() 
{ 
    super.onPause(); 
} 

@Override 
public void onResume() 
{ 
    super.onResume(); 
} 

잘 작동합니다. 누군가가 도움이되기를 바랍니다.

0

나는이 스레드가 오래된 것을 알고 있지만, 나는 아마 같은 문제를 가지고있었습니다. 당신의 방법은 무엇입니까

complain("Error purchasing: " + result); 

무엇입니까?

나는 정확히 같은 장소에서

Toast.makeText(getParent(), "Premium purchased successfully", Toast.LENGTH_LONG) 
        .show(); 

라고 불리는이 나에게 다음과 같은 오류 발생 : 이것은 당신이 (당신의 "불평 확인해야합니다, 여전히 관련이있는 경우

06-26 14:02:54.229: E/AndroidRuntime(25681): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=10001, result=0, data=Intent { (has extras) }} to activity {sf.com.flightBook/sf.com.flightBook.ui.configuration.ConfigurationMain}: java.lang.NullPointerException 

을) "방법.

1

나는 정적 내 IabHelper 멤버 변수 (mHelper)를 만드는 단순히 하여이 문제를 해결

0

난 내 응용 프로그램에서 내 공개 키는 구글이 생성 된 플레이 키를 라이센스에 해당하지 않음을 알아 낸이 문제가 있었을 때 내 응용 프로그램에 대한