在应用内计费的安卓系统中,尝试订阅产品时需要返回身份验证。

46

这是我第一次在Android中处理应用内购买:

  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) 我遇到了以下错误:

enter image description here

  • 我尝试使用不同的设备,但都遇到了相同的错误。我已经通过我的Google账户登录,可以打开Google Play商店并查看我的应用程序。

  • 我还尝试清除应用管理器中Google Play商店的数据。

有人能帮忙吗?


我现在正在为我的一个新创建的应用内产品看到这个。我怀疑一旦谷歌将应用内产品“发布”到所有服务器上,几个小时后它就会消失。 - waterlooalex
问题已经解决了,当我发布应用程序时,我试图在未发布的应用程序上进行测试,因此我遇到了先前的错误,但是当我发布它时,我不再收到此错误。但现在我需要测试我的应用程序,您是否有任何关于如何使用沙盒模式测试订阅模块或至少使用静态响应(如购买产品)的信息? - Amira Elsayed Ismail
@Amira 请帮我解决同样的问题。你能否请发一下与应用内购相关的全部代码? - Anjali Tripathi
bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ是一个密钥,您需要传递哪个密钥? - Bhavesh Vadalia
为什么得票最高的答案在底部? - Ruchir Baronia
7个回答

40

我之前也遇到了同样的问题。请前往您的 Google 开发者控制台,并确保您的应用已发布到任何版本(alpha、beta 或 prod)。然后,应用内购买功能将正常工作。


2
这对我有用。我的建议是:一旦您点击“发布”您的应用程序,它需要几个小时才能获得批准。 - Daniel Ramos
10
此外,应用内产品需要处于激活状态(如果被禁用),否则会导致相同的问题。 - Toris
当我的应用程序处于草稿状态时,在生产、测试模式下上传应用程序时,我遇到了这个错误。是否必须发布才能解决这个错误? - UMAR-MOBITSOLUTIONS

19

遇到了可怕的信息相同的问题:

需要进行身份验证。您需要登录您的Google帐号。

对我来说有两个问题:

  1. 我尝试在我的代码中购买一个标识符为"com.argonnetech.wordswriting.noads"的产品,但在Google Play开发者(GPD)控制台中配置的应用内产品仅命名为“noads”
  2. 在GPD控制台更改应用程序内产品的名称后,我必须将其切换至“Active”模式

这样就可以运行了。 错误消息很具有误导性,一个像“应用项目不存在”的错误会更好一些。


3
第二点对我起了作用。即使我已经发布(在 beta 版)应用程序,我仍然遇到相同的错误。激活应用内项目已解决该问题。 - frusso
这是我的解决方案,ID不匹配。 - Steven Carlton
是的,第二个!就是那个。 - Boris Karloff

6

如果您是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";

在初始化IabHelper类以进行应用内购买时,请将以下代码放置于onCreate()中:

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, "");

谢谢大家...


http://stackoverflow.com/questions/38648707/you-need-to-sign-in-to-your-google-account - Ruchir Baronia

2

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

  • 在Android Studio中使用发布密钥签署您的应用程序(这将创建一个已签名的 app-release.apk 文件)
  • 然后确保使用 adb install path/to/your/app-release.apk 将其安装到您的物理设备上(不要通过Alpha / Beta

screenshot



2
开发者文档在developer.android.com上似乎已经过时了。
如果你想测试应用内购买而不发布它,你需要创建一个Google群组并添加一个alpha测试者列表。请参见这里:https://support.google.com/googleplay/android-developer/answer/3131213?hl=en 更新:
从2015年中期开始,这已经不再必要了。你在Google Play开发者控制台上有几个新的测试选项。

1
这几个新选项是什么? - Mightian
Alpha和Beta测试,有几个选项:个人电子邮件邀请、小组等等(下拉菜单中可见)。 - lenooh

1
在我的情况下,versionCodeversionNameapplicationId与开发者控制台上应用程序的当前版本不同步。我在build.gradle文件中更改了这些内容。它们之前不同是因为我从eclipse重新编写了这个应用程序。此后,应用内购买功能正常工作。

1

以下是我使用的方法:

  • 将草稿应用程序上传为alpha或beta,并附上一些版本代码。
  • 使用具有活动订阅的帐户在设备上登录。
  • 在此设备上安装与alpha/beta发布中相同版本的已签名应用程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接