2013-02-09 17 views
6

Zaimplementowałem w zakupie aplikacji w mojej aplikacji Użyłem przykładu "TrivialDrive" dla wersji 3 rozliczeń w aplikacji, przetestowałem aplikację, używając odpowiedzi statycznych, wszystko działa zgodnie z oczekiwaniami.Zakup aplikacji w systemie Android ulega awarii po płatności

Ale kiedy pobrać aplikację z Marketu, awarie aplikacji na udany zakup,

Mój kod to udany zakup

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); 
    } 
    } 
} 
}; 

Mam konfigurowania wiadomość o udanym zakupie, ale nie mogę zobaczyć tę wiadomość, (oznacza, że ​​te linki nie są wykonywane), gdy pomyślnie go kupiłem, awarie aplikacji po udanej płatności.

Po ponownym uruchomieniu aplikacji i spróbuj kupić przedmiot, jest już zakupiony.

Mam raport o awariach z konsoli programisty.

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 

Jej rzucanie wyjątki pustego wskaźnika w onActivityResult() metoda na tej linii

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

metoda jest jak ten

@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."); 
} 
} 

to działa perfekcyjnie na odpowiedzi statyczne, ale wywala na kiedy ja zakup z rynku.

+1

Mam do czynienia z tym samym problemem od wczoraj. Mam nadzieję, że otrzymam rozwiązanie tutaj. –

+0

Mam również do czynienia z tym problemem od wczoraj, nie wiem, dlaczego – Goofy

+0

@MehulJoisar po przesłaniu aplikacji? – Goofy

Odpowiedz

0

Miałem do czynienia z tym samym problemem. Wtedy zdałem sobie sprawę, że cała aktywność jest czasami odtwarzana podczas procesu zakupu (bez powodu). Nie testowałem oddzielnie przykładu Trivia, aby sprawdzić, czy to samo dzieje się z tą aplikacją, ale spodziewam się tego, ponieważ wydaje się, że jest ona związana z procesem fakturowania (lub z pomocniczymi metodami tego przykładu, których używam w mojej własnej aplikacji także).

Jedyna różnica między częścią rozliczeniową mojego własnego kodu a przykładem Trivia polegała na tym, że tworzyłem mHelper z metody uruchomionej dla określonego zdarzenia, podczas gdy w Trivia przykład jest tworzony z onCreate. Tak więc dokonałem tej zmiany (teraz tworzę nową instancję mHelper z onCreate) i wszystko zaczęło działać poprawnie. Chodzi o to, że po odtworzeniu działania mHelper ponownie tworzy instancję onCreate, więc w poniższym wywołaniu funkcji onActivityResult nie może mieć wartości NULL.

Szczerze mówiąc, nie mam pojęcia, dlaczego działanie zostało odtworzone i dlaczego wywoływana jest metoda onActivityResult nowej instancji działania, ale wszystko wydaje się teraz działać.

+0

To brzmi dziwnie! –

+0

Tak, wiem, że to brzmi dziwnie, ale działa, a to z pewnością źródło problemu. Jestem pewien, że problem jest związany z bibliotekami z przykładu Trivia, a nie z samym fakturowaniem w aplikacji, więc twój komentarz w pierwotnym pytaniu "Uważam, że w aplikacji 3 nie jest jeszcze stabilny", nie ma sensu. Chciałbym, aby @Mac, osoba, która zadała pytanie, wysłała, gdyby przeniósł tworzenie instancji mHelper z metody onCreate, tak jak to zrobiłem na początku ... – thelawnmowerman

+0

ok i tak, jest jakiś błąd, działanie nie powinienem był odtwarzać. I oczywiście napisałem komentarz do aplikacji w wersji 3 (oznacza bibliotekę w aplikacji w wersji 3), a nie do całej funkcji zakupu w aplikacji Google. –

0

Miałem ten sam problem. To, co znalazłem, to fakt, że po wyświetleniu okna zakupu w aplikacji metoda onPause jest wykonywana w mojej aktywności aplikacji, a gdy pole jest zamknięte, wykonywana jest metoda onResume. Jest to kod z następujących metod:

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

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

końcu usunąć wiersze, w których mWaveLock jest wykonywany.

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

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

i działa dobrze. Mam nadzieję, że to pomoże komuś.

0

Wiem, że ten wątek jest stary, ale prawdopodobnie miałem ten sam problem. Do czego służy Twoja metoda?

Zadzwoniłem

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

w dokładnie tym samym miejscu, a to spowodowało następujący błąd dla mnie:

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 

Jeśli jest to nadal aktualne dla ciebie, należy sprawdzić „skarżą ()" metoda.

1

naprawiłem ten problem po prostu że mój zmienną składową IabHelper (mHelper) statyczny

0

Gdy miałem ten problem zorientowali się, że mój klucz publiczny w mojej aplikacji nie odpowiada klucz, który Google Play wygenerowany licencji dla mojej aplikacji

Powiązane problemy