我使用GameHelper类和IabHelper类在我的libgdx游戏中实现了Google Play商店。排行榜可以工作,但如果我尝试购买Google Play商店的商品时说:“需要授权,请使用Google帐户登录”。在我实施IabHelper之前,我的游戏向我展示了使用我的帐户登录,但现在我什么都看不到,但没有登录我看不到排行榜或? 我希望你能帮助我,为什么谷歌Play商店显示我的错误Google Play商店错误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)
谢谢,但你看到我骑购买问题已经完成?我希望。购买系统现在不是我的问题,问题是现在的谷歌如果我在Android工作室开始我的游戏,但是如果我上传apk上的谷歌播放,我下载它,我成为一个错误 – wiifree
好吧,我不明白它,现在它的工作,播放服务和购买服务。我不明白谷歌。非常感谢你的帮助 – wiifree
@wiifree好的,这听起来不错。如果你不介意,请为我的答案投票,以获得更多的声誉,只是一点点的奖励,以保持积极主动,并继续帮助别人。再见。 – josemwarrior