尝试订阅产品时需要应用内计费 android 返回身份验证

Posted

技术标签:

【中文标题】尝试订阅产品时需要应用内计费 android 返回身份验证【英文标题】:in-app billing android return authentication is required when try to subscribe to product 【发布时间】:2015-03-11 15:55:28 【问题描述】:

这是我第一次在 android 中处理 In-App Billing 1) 我正在使用 API v3 2)我已经上传了我的应用程序的 alpha 版本以便能够测试

3) 我创建了一个订阅产品

4) 这是我在产品中订阅的代码

mSubscribeButton.setOnClickListener(new OnClickListener() 

        @Override
        public void onClick(View v) 

            try 

                Bundle subscribeIntentBundle = mService.getBuyIntent(3, getPackageName(), "my_product_id", "subs", "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");
                PendingIntent pendingIntent = subscribeIntentBundle.getParcelable("BUY_INTENT");

                if (subscribeIntentBundle.getInt("RESPONSE_CODE") == 0) 

                    startIntentSenderForResult(pendingIntent.getIntentSender(), 4002, new Intent(), Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0));
                 else 
                    Toast.makeText(MainActivity.this, "Error Code: " + subscribeIntentBundle.getInt("RESPONSE_CODE"), Toast.LENGTH_SHORT).show();
                
             catch (RemoteException e) 
                e.printStackTrace();
             catch (SendIntentException e) 
                e.printStackTrace();
            
        
    );

5) 我收到以下错误

我尝试使用不同的设备,都出现同样的错误,我也用我的 Google 帐户登录,可以打开 Google Play 商店并查看我的应用程序

我也尝试从应用管理器中清除 Google Play 商店的数据

有人可以帮忙吗??

【问题讨论】:

我现在正在为我新创建的应用内产品之一看到这一点。我怀疑一旦应用内产品被谷歌“发布”到他们的所有服务器,它会在几个小时内消失。 当我发布应用程序时问题解决了,我试图在未发布的应用程序上测试,所以我得到了以前的错误,但是当我发布它时我没有收到这个错误了,但是什么我现在需要测试我的应用程序,您是否有任何关于如何使用沙盒模式测试订阅模块的信息,或者至少使用像购买产品这样的静态响应。 @Amira 请帮我解决同样的问题。您可以发布您与应用内购买相关的整个代码吗? bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ 我必须通过哪个键? 为什么票数最高的答案在底部? 【参考方案1】:

我以前也有同样的问题。转到您的 Google 开发者控制台并确保您的应用已发布到任何版本(alpha、beta 或 prod)。然后,应用内购买将起作用:)

【讨论】:

这对我有用。我的两分钱:点击“发布”您的应用后,需要几个小时才能获得批准。 此外,应用内产品需要处于活动状态,(如果禁用)会导致同样的问题。 当我的应用在生产中上传时出现此错误,测试模式但应用状态为草稿,是否必须发布相同的错误?【参考方案2】:

同样的问题与可怕的消息:

需要身份验证。您需要登录自己的 Google 帐户。

我遇到了两个问题:

    我尝试在我的代码中购买标识符为 "com.argonnetech.wordswriting.noads" 的产品,但在 Google Play 开发者 (GPD) 控制台中配置的应用内产品被简单命名为“noads” 在 GPD 控制台中更改应用内产品的名称后,我不得不将其切换到“活动”模式

它奏效了。错误消息具有误导性,类似“应用内项目不存在会更好”之类的错误。

【讨论】:

第二点对我有用。即使我已经发布了(测试版)应用程序,我也遇到了同样的错误。激活inapp项解决了问题。 这是我的解决方案,ID 不匹配。 是的,第二个!就是这样。【参考方案3】:

应用内购买帐户的 Android 开发者测试应遵循此键。

Base64EncodedPublicKey

// 测试base64EncodedPublicKey

public static final String base64EncodedPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCg" +
 "KCAQEAhNe2XQ70DceAwE6uyYJGK1dIBbZcPdlER/9EEzylr6RDU6tnGj0Tk7kceN03GKvRf/ucT+ERLL3O" +
 "aHR22PXRXLZ17NZ81x6oS2vGmLyXBnjrU/I+asl8cNuLGySaoCdXxPAV+A9g6OG13dk+KY9i0O1roGpFH" +
 "fsAFyKCgSqR0PMJZ1bS+wFFBYf3M4IxgBcxuuZKDmR+MztCgm5N4zc6w2CwFZn3mXeDoTg15mWDU3sZO" +
 "WeRwFeynhV+FCYdDp8DpAkLk1b5IiXYFQ53wxCh/GxiKqBB6uQMmAixFjAcZV1QWfcBABae9vxiV5" +
 "VAEJvOOnhPxnaT9HYadW0pQ/UbJwIDAQAB";

和物品购买的钥匙一样

ITEM_PURCHASED

// 测试ITEM_PURCHASED

public static final String ITEM_PURCHASED = "android.test.purchased";

然后开始把这个代码 onCreate() 初始化 IabHelper应用内购买

IabHelper helper = new IabHelper(this, Constants.base64EncodedPublicKey);
helper.startSetup(new IabHelper.OnIabSetupFinishedListener() 
        public void onIabSetupFinished(IabResult result) 
            if (!result.isSuccess()) 
                Log.d("#InAppStartSetup#", "In-app Billing setup failed: " + result);
             else 
                Log.d("#InAppStartSetup#", "In-app Billing setup successful.");
            
        
    );

最后在这里购买了这段代码句柄的时间,

helper.launchPurchaseFlow(YOUR_ACTIVITY, Constants.ITEM_PURCHASED,
                YOUR_REQUEST_CODE, mPurchaseFinishedListener, "");

谢谢大家...

【讨论】:

***.com/questions/38648707/…【参考方案4】:

developer.android.com 上的文档似乎已经过时了。

如果您想在不发布的情况下测试您的应用内结算,您必须创建一个 Google 群组并添加一个 Alpha 版测试人员列表。看这里: https://support.google.com/googleplay/android-developer/answer/3131213?hl=en

更新

从 2015 年年中开始,不再需要这样做。您在 google play 开发者控制台中有几个新的测试选项。

【讨论】:

这几个新选项是什么? alpha 和 beta 测试,有几个选项:个人电子邮件邀请、组和我认为的其他一些(这是一个下拉菜单,打开它,看看里面有什么)。【参考方案5】:

上述大多数解决方案都有效,但对于那些仍然遇到此问题的人,请尝试以下操作:

在 Android Studio 中,使用发布密钥为您的应用签名(这将创建一个签名的 app-release.apk 文件) 然后确保您使用 adb install path/to/your/app-release.apk不通过 Alpha/测试版) Testing Your In-app Billing Application

【讨论】:

【参考方案6】:

在我的情况下,versionCodeversionNameapplicationId 与开发者控制台上的应用程序的当前版本不同步。我在 build.gradle 文件中更改了这些。它们是不同的,因为我从 Eclipse 重写了 android studio 中的应用程序。在此之后,应用内计费工作。

【讨论】:

【参考方案7】:

以下对我有用:

将草稿应用程序上传为 alpha 或 beta 以及一些版本代码。 使用具有有效订阅的帐户登录设备。 在此设备上安装与 alpha/beta 版本相同版本的签名应用程序。

【讨论】:

以上是关于尝试订阅产品时需要应用内计费 android 返回身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何存储 Android 应用内计费的订阅数据?

Android 应用内计费版本 3 获得过期订阅

如何在 Android 中测试 Google Play 计费订阅(非应用内购买)

Android/Google Play:我真的需要我的 OWN 服务器来管理应用内计费订阅吗?

Android 应用内订阅测试

测试应用内计费