Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java libgdx游戏中的Google Play商店错误_Java_Android_Libgdx_Google Play Services - Fatal编程技术网

Java libgdx游戏中的Google Play商店错误

Java libgdx游戏中的Google Play商店错误,java,android,libgdx,google-play-services,Java,Android,Libgdx,Google Play Services,我在libgdx游戏中使用GameHelper类和IabHelper类实现了googleplay商店。排行榜起作用,但如果我试图购买一件物品,谷歌Play商店会说:“需要授权,请使用谷歌帐户登录”。在我实现iBAHelper之前,我的游戏会显示我的帐户登录名,但是现在我什么也看不到,但是如果没有登录名,我就看不到排行榜或者? 我希望你能帮助我为什么谷歌游戏商店显示我的错误 以下是androidlauncher代码: public class AndroidLauncher extends And

我在libgdx游戏中使用GameHelper类和IabHelper类实现了googleplay商店。排行榜起作用,但如果我试图购买一件物品,谷歌Play商店会说:“需要授权,请使用谷歌帐户登录”。在我实现iBAHelper之前,我的游戏会显示我的帐户登录名,但是现在我什么也看不到,但是如果没有登录名,我就看不到排行榜或者? 我希望你能帮助我为什么谷歌游戏商店显示我的错误

以下是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


        }
    }
};

}
本教程帮助我:

如果我点击购买按钮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) 

您是否可以在logcat中看到类似“设置应用内账单时出现问题:”这样的消息?? 日志中显示了什么样的错误?你能邮寄吗

记住,购买物品必须满足以下几个条件:

  • 你的apk必须上传到你的Google Play开发者控制台,你没有必要公开发布你的apk,你可以选择一个“测试版”,因为只有你可以下载。()确保使用最终(非调试)证书和私钥对应用程序进行签名
  • 如果您的应用程序具有购买权限(),则在Android-manifiest.xml中,Google Play开发者控制台中apk面板中会出现一个子菜单,您必须定义您要购买的项目
完成这两个步骤后,显示日志猫的跟踪,例如:

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

我会告诉你一些指示。你必须严格按照指示去做,好吗

  • 你用谷歌帐号登录开发者控制台,好吗?然后,转到手机中的设置>帐户并删除此帐户,如果您没有任何google帐户,则必须创建另一个google帐户以测试inapp账单,并在设置>帐户中将其添加到手机中。记住,重复一遍,在你的手机中不能有开发者控制台的谷歌帐号。使用另一个帐户进行测试,您可以在完成工作后添加帐户

  • 能够测试实际购买,且不收费。您必须在开发者控制台中添加帐户测试gmail: (设置>帐户详细信息)

当您在应用程序内单击购买时,您必须立即添加信用卡,但请确保您可以看到以下“请勿收费”的句子:

  • 非常重要的是,你上传一个已签名的apk(不是调试版本),如果你不知道怎么做,请让我知道,我可以帮助你

  • Unistall您当前安装在手机中的apk,前往商店并通过商店下载测试版,是的,您可以通过此下载测试版,只需复制链接(),然后确认测试版。为了能够通过测试google帐户查看和下载beta版本,您需要在beta(或alpha)版本页面中添加测试电子邮件帐户。 在开发人员控制台中的“APK”菜单中,您可以添加测试电子邮件以查看商店中的APK(在商店中,只能查看APK,此处列出的人员没有其他人):

完成这里列出的每一点后,如果您有任何问题,请告诉我。
我希望这对您有用。

我测试了一些。如果我将base64EncodedPublicKey删除为该字符串base64EncodedPublicKey=“”;它向我显示了同样的错误。好像“我的游戏”没有连接到我的应用内产品帐户,但logcat对此问题不显示任何设置应用内计费。日志中没有显示这一点。它显示此D/IAB:Billing Success:IabResult:Setup successful。(响应:0:确定)逻辑上是因为认证窗口在采购窗口之前出现,并且在采购窗口之外logcat无法显示此日志。d(“IAB”,“采购问题:+结果”)@您是否正在使用开发人员帐户进行测试?Google Play不允许您使用自己的开发者帐户与自己的应用进行任何电子商务。您甚至可能无法测试测试购买。您是否“发布”了alpha版本并在开发人员控制台中创建了premium项?如果问题仍然存在:您能否尝试在google play上使用不同的软件包名称和新应用程序再次上传apk,并尝试重新创建问题?我不发布alpha版本,我使用google tester组对其进行测试。你说的高档商品是什么意思?谢谢,但你看我的骑行购买问题解决了吗?我希望如此。购买系统现在不是我的问题,问题是谷歌游戏服务。如果我在android studio中开始游戏,这是可行的,但如果我在google play上上传apk并下载,我会变成一个错误OK,我不明白。现在它起作用了。播放服务和购买服务。我不懂谷歌。非常感谢你的邀请help@wiifree好的,听起来不错。如果你不介意,请投票支持我的答案,以获得更多的声誉,这只是一个小小的奖励,以保持积极性,并继续帮助他人。再见。