Android 使用多个帐户进行应用内购买

Android 使用多个帐户进行应用内购买,android,google-play,google-play-services,in-app-billing,android-billing,Android,Google Play,Google Play Services,In App Billing,Android Billing,我在应用程序内购买/订阅方面遇到问题: 如果设备上有多个帐户,我将无法获得使用第二个帐户进行的购买。 有时可以通过从Google Play web界面安装应用程序来暂时解决这个问题,但过一段时间后,购买的内容将不会出现在查询中,从而迫使用户重新安装 我正在使用来自的IAB帮助器类 在谷歌搜索时,我发现这个bug已经存在了一段时间,但不幸的是,我无法确定错误是在IABHeloper类中还是在谷歌方面 我想提请大家注意谷歌,所以他们提供了一个适当的解决方案,无论是在IABHeloper类中,还是在P

我在应用程序内购买/订阅方面遇到问题:

如果设备上有多个帐户,我将无法获得使用第二个帐户进行的购买。 有时可以通过从Google Play web界面安装应用程序来暂时解决这个问题,但过一段时间后,购买的内容将不会出现在查询中,从而迫使用户重新安装

我正在使用来自的IAB帮助器类

在谷歌搜索时,我发现这个bug已经存在了一段时间,但不幸的是,我无法确定错误是在IABHeloper类中还是在谷歌方面

我想提请大家注意谷歌,所以他们提供了一个适当的解决方案,无论是在IABHeloper类中,还是在Play服务中,或者提供信息,说明应该如何处理

我在一个有900.000活跃用户安装的应用程序中使用了该代码(在撰写本文时),因此我不得不触发大量退款

如果有一个解决方案,我错过了,请让我知道

编辑:
有时,即使手机上只有一个帐户,也根本无法检索到购买的物品。

应用内计费服务API中肯定存在漏洞。是一个类似的问题,正如其中一个答案中提到的,可能是您需要引入登录机制,并将从帐户购买的物品存储到您的服务器或本地设备上的加密文件或类似文件中。

几个月后,我遇到了同样的问题。 经过几个小时的寻找解决方案,我想出了一个解决办法

您可以使用OAuth2.0

但您还必须从后端管理它。 我不是一个后端开发人员,所以我不知道它在后端是如何工作的,但在应用程序端,我做过类似的事情

您可以使用第一个允许在您的服务端进行身份验证的Google帐户。OAuth2.0是一个工具,它简化了开发人员的工作,使他们能够以一种简单的方式允许用户访问您的应用程序。OAuthHmacSigner类管理身份验证

signer = new OAuthHmacSigner();
signer.clientSharedSecret = Constants.CONSUMER_SECRET;
然后,Android活动使用以下代码启动OAuth流:

launchOauth.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        startActivity(new Intent().setClass(v.getContext(),
            PrepareRequestTokenActivity.class));
    }
});
为了获得OAuth 2.0访问令牌,只需调用:

AccountManager.getAuthToken()

我希望这可能会有所帮助:)

我有两个帐户,但其中一个不起作用。我所做的是进入android的设置,然后进入帐户偏好。我将我的主帐户从一个不工作的帐户更改为工作帐户。然后,我将这个新帐户指定为我所有应用程序的主帐户,包括GooglePlay。这对我很管用。有时,如果出于某种原因,它不起作用,你也可以上网,从互联网上访问谷歌游戏商店

尝试获取以.apk或.xcode结尾的文件签名的dup…duplicate dot

似乎没有解决此问题的唯一方法,但让我们尝试一下

  • 当用户首次安装应用程序时,获取其主要电子邮件或设备上的所有帐户

  • 询问用户未来将使用哪封电子邮件付款/或哪个帐户在google play中处于活动状态

    您可以使用此代码获取帐户

    Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+
    Account[] accounts = AccountManager.get(context).getAccounts();
    for (Account account : accounts) {
        if (emailPattern.matcher(account.name).matches()) {
            String possibleEmail = account.name;
            ...
        }
    }
    
    别忘了征求许可

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    
    
    
    用户选择电子邮件后,您可以通过电子邮件发送链接以确认此电子邮件地址

  • 将所有付款引导至该特定电子邮件

  • 方法2

    使用新的“使用Gmail发送和接收资金”功能

  • 创建电子邮件意图并将特定数据发送到电子邮件意图并付款

  • 成功后,向用户电子邮件发送代码

  • 使用代码激活他们购买的任何产品

  • 方法3


    使用另一个支付库或网关进行应用内购买,而不是使用Google play。

    我不确定这是否是您正在搜索的答案,但也许设置一个共享的Google play家庭库就足够了。如果需要,它最多可以为5个用户共享相同的购买(应用程序、音乐、电影等)


    (请参阅:)

    正如其他人所指出的,这是Google Play计费库的一个bug。如果它影响到你,请将此问题挂起,以便谷歌能够注意到它(真的吗?),并开始修复它。

    这不是一个吸引谷歌注意的地方。你需要登录你的bug。这是错误的问题跟踪程序。这是一个游戏商店,游戏服务,钱包或购买问题。您使用的是什么版本的IAP?能否在编辑中突出显示您的具体问题?这将使社区更容易一目了然地确定特定问题,并帮助我们更快地帮助您。这里所有的答案都很糟糕。2017年是否有合适的解决方案,特别是针对从apk测试应用程序的开发人员?我不会将购买信息存储在其他地方。如果其他设备需要相同的购买信息,我们将怎么做?或者,如果同一个帐户在不同的设备上同步,您将如何获得购买信息?在这种情况下,您需要从服务器上同步它。每次用户登录到您的应用程序时,您都会检查他是否是现有用户。如果是,则从数据库获取详细信息,否则在数据库中创建一个新条目。方法3在Play Store上发布时违反Google的政策,我想方法2也是如此。方法1,无法执行#3,因为在应用内购买库中没有选择帐户的选项。@3c71所以无法处理它?没有办法让用户通过代码“恢复”购买?@androiddeveloper,除了从Play Store访问应用内之外的任何方法都不会自动调整。谷歌提供的应用程序库中没有任何电子邮件帐户参数。也许允许访问购买信息的谷歌API将是一个很好的解决方案,但我自己还没有尝试过。通常的解决方案是让最终用户在Play Store或Android操作系统中选择合适的帐户,但不确定是哪个。@3c71我在reddit上被告知用户可以删除该应用程序,请访问该应用程序的