2015-10-16 2 views
1

Я реализую Google Play Store в своей игре libgdx с классом GameHelper и классом IabHelper. Ведущие работают, но если я попытаюсь купить товар, в Google Play Store говорится: «Требуется авторизация, войдите в систему с учетной записью google». Перед тем, как я реализую IabHelper my Game, покажите мне Войти с моей учетной записью, но теперь я ничего не вижу, но без логина я не вижу лидеров или? Я надеюсь, что вы можете помочь мне, почему Google Play Маркет показать мне ошибкуОшибка в Google Play Store в игре libgdx

вот androidlauncher код:

public class AndroidLauncher extends AndroidApplication implements GameHelper.GameHelperListener, ActionResolver, IabInterface { 

private GameHelper gameHelper; 
IabHelper mHelper; 

@Override 
protected void onCreate (Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    if (gameHelper == null) { 
     gameHelper = new GameHelper(this, GameHelper.CLIENT_GAMES); 
     gameHelper.enableDebugLog(true); 
    } 
    gameHelper.setup(this); 

    String base64EncodedPublicKey = "{----}"; //here stand my key 

    mHelper = new IabHelper(this,base64EncodedPublicKey); 

    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { 
     public void onIabSetupFinished(IabResult result) { 
      if (!result.isSuccess()) { 
       // Oh noes, there was a problem. 
       Log.d("IAB", "Problem setting up In-app Billing: " + result); 
      } 
      // Hooray, IAB is fully set up! 
      Log.d("IAB", "Billing Success: " + result); 
     } 
    }); 

    AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); 

    config.useAccelerometer = false; 
    config.useCompass = false; 
    config.useWakelock = true; 

    initialize(new mygame(this,this), config); 

} 

@Override 
public void onStart() { 
    super.onStart(); 
    gameHelper.onStart(this); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    gameHelper.onStop(); 
} 

@Override 
public void onSignInFailed() { 
    // TODO Auto-generated method stub 
    System.out.println("Sign in failed"); 
} 

@Override 
public void onSignInSucceeded() { 
    // TODO Auto-generated method stub 
    System.out.println("Sign in succeeded"); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 
    gameHelper.onActivityResult(requestCode, resultCode, data); 

    if (mHelper != null) { 
     // Pass on the activity result to the helper for handling 
     if (mHelper.handleActivityResult(requestCode, resultCode, data)) { 
      Log.d("IAB", "onActivityResult handled by IABUtil."); 
     } 
    } 
} 

@Override 
public boolean getSignedInGPGS() { 
    return gameHelper.isSignedIn(); 
} 

@Override 
public void loginGPGS() { 
    try { 
     runOnUiThread(new Runnable(){ 
      public void run() { 
       gameHelper.beginUserInitiatedSignIn(); 
      } 
     }); 
    } catch (final Exception ex) { 
    } 
} 

@Override 
public void submitScoreGPGS(int score) { 
    Games.Leaderboards.submitScore(gameHelper.getApiClient(), "----", score); //---- is my leaderboardkey 
} 

@Override 
public void unlockAchievementGPGS(String achievementId) { 
    Games.Achievements.unlock(gameHelper.getApiClient(), achievementId); 
} 

@Override 
public void getLeaderboardGPGS() { 
    if (gameHelper.isSignedIn()) { 
     startActivityForResult(Games.Leaderboards.getLeaderboardIntent(gameHelper.getApiClient(), "----"), 100); //---- is my leaderboardkey 
    } 
    else if (!gameHelper.isConnecting()) { 
     loginGPGS(); 
    } 
} 

@Override 
public void getAchievementsGPGS() { 
    if (gameHelper.isSignedIn()) { 
     startActivityForResult(Games.Achievements.getAchievementsIntent(gameHelper.getApiClient()), 101); 
    } 
    else if (!gameHelper.isConnecting()) { 
     loginGPGS(); 
    } 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (mHelper != null) mHelper.dispose(); 
    mHelper = null; 
} 

@Override 
public void buy_100_random_points() { 
    mHelper.launchPurchaseFlow(this,one_hundret_random_points,RC_Request,mPurchaseFinishedListener,"HANDLE_PAYLOADS"); 
} 

// Callback for when a purchase is finished 
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() { 
    public void onIabPurchaseFinished(IabResult result, Purchase purchase) { 
     if (purchase == null) return; 
     Log.d("IAB", "Purchase finished: " + result + ", purchase: " + purchase); 

     // if we were disposed of in the meantime, quit. 
     if (mHelper == null) return; 

     if (result.isFailure()) { 
      //complain("Error purchasing: " + result); 
      //setWaitScreen(false); 
      return; 
     } 
//   if (!verifyDeveloperPayload(purchase)) { 
//    //complain("Error purchasing. Authenticity verification failed."); 
//    //setWaitScreen(false); 
//    return; 
//   } 

     Log.d("IAB", "Purchase successful."); 

     if (purchase.getSku().equals(one_hundret_random_points)) { 
      // bought the premium upgrade! 
      Log.d("IAB", "Purchase is premium upgrade. Congratulating user."); 

      // Do what you want here maybe call your game to do some update 
      // 
      // Maybe set a flag to indicate that ads shouldn't show anymore 


     } 
    } 
}; 

} 

этот учебник поможет мне: tutorial link

если я нажать на кнопку покупки LogCat показать мне это в красном цвете:

10-19 06:33:27.980 2350-2361/? E/Parcel: Class not found when unmarshalling:  com.google.android.finsky.billing.lightpurchase.PurchaseParams 
10-19 06:33:27.980 2350-2361/? E/Parcel: java.lang.ClassNotFoundException: com.google.android.finsky.billing.lightpurchase.PurchaseParams 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at java.lang.Class.classForName(Native Method) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at java.lang.Class.forName(Class.java:204) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at java.lang.Class.forName(Class.java:169) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Parcel.readParcelableCreator(Parcel.java:2091) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Parcel.readParcelable(Parcel.java:2055) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Parcel.readValue(Parcel.java:1971) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Parcel.readMapInternal(Parcel.java:2255) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Bundle.unparcel(Bundle.java:223) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Bundle.getString(Bundle.java:1082) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.content.Intent.getStringExtra(Intent.java:4961) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.ActivityStack.startActivityLocked(ActivityStack.java:3761) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.ActivityStack.startActivityMayWait(ActivityStack.java:4977) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.ActivityManagerService.startActivityInPackage(ActivityManagerService.java:3391) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.PendingIntentRecord.sendInner(PendingIntentRecord.java:254) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.ActivityManagerService.startActivityIntentSender(ActivityManagerService.java:3283) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:258) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2125) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Binder.execTransact(Binder.java:388) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at dalvik.system.NativeStart.run(Native Method) 
10-19 06:33:27.980 2350-2361/? E/Parcel: Caused by: java.lang.NoClassDefFoundError: com/google/android/finsky/billing/lightpurchase/PurchaseParams 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at java.lang.Class.classForName(Native Method)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at java.lang.Class.forName(Class.java:204)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at java.lang.Class.forName(Class.java:169)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Parcel.readParcelableCreator(Parcel.java:2091)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Parcel.readParcelable(Parcel.java:2055)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Parcel.readValue(Parcel.java:1971)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Parcel.readMapInternal(Parcel.java:2255)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Bundle.unparcel(Bundle.java:223)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Bundle.getString(Bundle.java:1082)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.content.Intent.getStringExtra(Intent.java:4961)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.ActivityStack.startActivityLocked(ActivityStack.java:3761)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.ActivityStack.startActivityMayWait(ActivityStack.java:4977)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.ActivityManagerService.startActivityInPackage(ActivityManagerService.java:3391)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.PendingIntentRecord.sendInner(PendingIntentRecord.java:254)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.ActivityManagerService.startActivityIntentSender(ActivityManagerService.java:3283)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:258)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2125)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Binder.execTransact(Binder.java:388)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at dalvik.system.NativeStart.run(Native Method)  
10-19 06:33:27.980 2350-2361/? E/Parcel: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.finsky.billing.lightpurchase.PurchaseParams" on path: . 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:64) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at java.lang.ClassLoader.loadClass(ClassLoader.java:501) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at java.lang.ClassLoader.loadClass(ClassLoader.java:461) 
10-19 06:33:27.980 2350-2361/? E/Parcel:  at java.lang.Class.classForName(Native Method)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at java.lang.Class.forName(Class.java:204)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at java.lang.Class.forName(Class.java:169)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Parcel.readParcelableCreator(Parcel.java:2091)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Parcel.readParcelable(Parcel.java:2055)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Parcel.readValue(Parcel.java:1971)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Parcel.readMapInternal(Parcel.java:2255)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Bundle.unparcel(Bundle.java:223)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Bundle.getString(Bundle.java:1082)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.content.Intent.getStringExtra(Intent.java:4961)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.ActivityStack.startActivityLocked(ActivityStack.java:3761)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.ActivityStack.startActivityMayWait(ActivityStack.java:4977)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.ActivityManagerService.startActivityInPackage(ActivityManagerService.java:3391)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.PendingIntentRecord.sendInner(PendingIntentRecord.java:254)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.ActivityManagerService.startActivityIntentSender(ActivityManagerService.java:3283)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:258)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2125)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at android.os.Binder.execTransact(Binder.java:388)  
10-19 06:33:27.980 2350-2361/? E/Parcel:  at dalvik.system.NativeStart.run(Native Method)  

ответ

2

Я расскажу вам несколько инструкций. Они должны следовать инструкциям к письму, ладно ?.

  • Вы заходите в консоль разработчика с учетной записью google, хорошо? Затем перейдите в «Настройки»> «Учетная запись» на своем телефоне и УДАЛИТЕ ЭТУ учетную запись, если у вас больше нет учетной записи google, тогда вы должны создать еще одну учетную запись google для тестирования биллинга inapp и добавить ее на телефон в «Настройка»> «Аккаунт» , Помните, повторите, в вашем телефоне не может быть учетной записи google консоли разработчика. Используйте другую для тестирования, вы можете добавить учетную запись позже, когда вы закончите свою работу.

  • Для проверки фактической покупки и оплаты не взимается.Вы должны добавить тестирования учетной записи Gmail в консоли разработчика здесь: (Настройки> Информация об учетной записи)

enter image description here

Вы должны добавить кредитную карту в тот момент, когда вы нажимаете на покупку внутри вашего приложение, но чтобы вы уверены, что вы можете увидеть ниже предложение для не взимать плату:

enter image description here

  • Очень важно, чтобы вы загрузили подписанный apk (НЕ ВЕРСИЯ DEBUG), если вы не знаете, как это сделать, сообщите мне, и я мог бы вам помочь.

  • Unistall ваш текущий apk установлен в вашем телефоне, зайдите в магазин и загрузите бета-версию через магазин, да вы можете скачать бета-версию через это, просто скопируйте ссылку (https://play.google.com/store/apps/details?id=com.yourpackage.change.this) и подтвердите бета-версию , Чтобы иметь возможность просматривать и загружать бета-версию с вашей тестовой учетной записью google, вам необходимо добавить тестовую учетную запись электронной почты на странице бета-версии (или альфа-версии). В вашем меню «APK» на вашем консоли разработчика здесь вы можете добавить тестовое письмо, чтобы увидеть apk в магазине (в магазине можно увидеть только apk, людей, перечисленных здесь никого не было):

enter image description here

После выполнения каждой точки, перечисленные здесь, если у вас есть какие-либо проблемы, дайте мне знать. Надеюсь, это будет полезно для вас.

+0

спасибо, но вы видите, что я езжу на проблему с покупкой. Надеюсь, система покупки не моя проблема сейчас, теперь проблема заключается в том, что Google играть в игру, работать, если я начну свою игру в андроид-студии, но если я загружу apk в google play, и я скачаю ее, я стану ошибкой – wiifree

+0

ОК, я не понимаю, теперь это работает. Игровые сервисы и сервис покупки. я не понимаю Google. Очень большое спасибо за вашу помощь – wiifree

+0

@wiifree нормально, это здорово. Если вы не возражаете, пожалуйста, проголосуйте за мои ответы, чтобы получить больше репутации, это всего лишь небольшая награда за сохранение мотивированы и продолжают помогать другим людям. Увидимся. – josemwarrior

0

вы можете увидеть в LogCat сообщение типа "Проблема настраивает In-App Billing:" ?? Какая ошибка отображается в вашем логарифме? Не могли бы вы опубликовать?

Не забудьте купить товар, вы должны выполнить несколько условий:

  • Ваш APK должны быть загружены в Google Play Developer Console, это не обязательно публиковать свой APK открыто, вы можете выбрать «бета-версию ", только для загрузки. (https://play.google.com/apps/publish/) Убедитесь, что вы используете свой окончательный (не отладочный) сертификат и закрытый ключ для подписания вашего приложения.
  • Если у вашего приложения есть разрешение на покупку (< использует-разрешение android: name = "com.android.vending.BILLING" />), в Android-manifestiest.xml подменю разблокируется в панели вашего apk в консоли разработчика Google Play, которую вам нужно будет определить, какой элемент вы хотите купить. http://developer.android.com/training/in-app-billing/list-iab-products.html#DefineProducts

Когда вы сделали эти два шага, и показать следы вашего LogCat, такие как:

Log.d ("IAB", "Problem setting up In-app Billing:" + result); 

тогда я мог бы продолжать помогать вам.

И, пожалуйста, изменить:

if (result.isFailure()) { 
     //complain("Error purchasing: " + result); 
     //setWaitScreen(false); 
     return; 
    } 

для этого:

if (result.isFailure()) { 
     Log.d ("IAB", "Problem with the purchase:" + result); 
     return; 
    } 
+0

и я проверяю некоторые. если я удалю base64EncodedPublicKey к этой строковой базе64EncodedPublicKey = ""; это показывает мне ту же ошибку. как если бы моя игра не подключалась к моей учетной записи для продуктов в приложении – wiifree

+0

, но logcat ничего не показывал для этой проблемы. Настройка биллинга в приложении. он не показывает это в журнале. он показывает этот D/IAB: Успех биллинга: IabResult: установка выполнена успешно. (ответ: 0: OK) – wiifree

+0

в начале, но позже IAB ничего не показывает – wiifree

Смежные вопросы