具有多个帐户的应用内购买

Posted

技术标签:

【中文标题】具有多个帐户的应用内购买【英文标题】:In-app purchases with multiple accounts 【发布时间】:2015-05-02 21:43:27 【问题描述】:

我遇到了应用内购买/订阅问题

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

我正在使用来自 this sample 的 IabHelper 类。

做一些谷歌搜索,我发现这个错误存在一段时间了,但不幸的是我无法找出错误是在 IabHelper 类中还是在谷歌方面。

我想提请注意 Google,因此他们在 IabHelper 类或 Play 服务中为此提供了适当的解决方案,或者提供了如何处理此问题的信息。

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

如果我错过了解决此问题的方法,请告诉我。

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

【问题讨论】:

这里不是吸引 Google 注意力的地方。您需要在code.google.com/p/android/issues/list 上记录您的错误。 这是错误的问题跟踪器。这是一个游戏商店、游戏服务、钱包或购买问题。 code.google.com/p/android/issues/detail?id=53307 您使用的是什么版本的 IAP? 您能否突出显示您在编辑中遇到的具体问题?这将使社区更容易一目了然地识别特定问题并帮助我们更快地为您提供帮助。 这里的所有答案都很糟糕。 2017 年是否有合适的解决方案,尤其是对于从 apk 测试其应用的开发人员? 【参考方案1】:

似乎没有单一的方法可以解决这个问题,但让我们尝试这样做。

    当用户首次安装应用时,获取他/她的主要电子邮件或设备上的所有帐户

    询问用户他们将使用什么电子邮件进行未来付款/或哪个帐户可用于 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" />
    

    用户选择邮箱后,您可以通过邮箱发送链接确认该邮箱

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

方法二

未来使用新的“使用 Gmail 汇款和收款”

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

    成功后,向用户邮箱发送代码

    使用代码激活他们购买的任何商品。

方法3

使用其他支付库或网关进行应用内购买,而不是 Google Play。

【讨论】:

方法 3 在 Play Store 上发布时违反了 Google 的政策,我想方法 2 也是如此。方法1,不能做#3,因为在应用内购买库中没有选择帐户的选项。 @3c71 那么有没有办法处理呢?没有办法让用户通过代码“恢复”购买? @androiddeveloper,除了从 Play 商店访问应用内之外的任何方法都不会被自动化。谷歌提供的应用内库在任何地方都没有电子邮件帐户参数。也许允许访问购买信息的 Google API 将是一个很好的解决方案,但我自己还没有尝试过。通常的解决方案是让最终用户在 Play 商店或 Android 操作系统中选择合适的帐户,但不确定是哪个。 @3c71 我在 reddit 上被告知,用户可以删除该应用程序,访问 Play 商店网站上的应用程序页面,选择他们用来执行 IAP 的帐户,然后从那里。然而,一位告诉我这个问题的用户说他试过了,但没有帮助:( @androiddeveloper 是的,我们的想法是使用用于购买应用内的相同帐户登录 Play 商店,和/或如下面的答案所述,以使用于购买的帐户在-应用“主”帐户。这是一种用户解决方法,我们在开发方面无能为力。如果他们给你机会说明你很幸运。【参考方案2】:

这肯定是应用内计费服务 API 中的错误。

This

是一个类似的问题,正如其中一个答案中提到的,您可能需要引入登录机制并将从帐户进行的购买存储到您的服务器或本地设备上的加密文件或类似文件中。

【讨论】:

我不会将购买的东西存储在其他地方。 在另一台设备上需要相同的购买信息,我们会怎么做?或者如果同一个账户在不同设备上同步,如何获取购买信息? 那么在这种情况下,您需要从服务器同步它。每次用户登录您的应用程序时,您都会检查他是否是现有用户。如果是,则从您的数据库中获取详细信息,否则在数据库中创建一个新条目。【参考方案3】:

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

您可以使用 OAuth 2.0。

但您还必须从后端对其进行管理。 我不是后端开发人员,所以我不知道它在后端到底是怎么做的,但在应用程序端我做了这样的事情,

您可以使用第一个允许在您的服务端进行身份验证的 Google 帐户。 OAuth 2.0 是一种工具,可简化并让开发人员轻松地允许用户访问您的应用程序。 OAuthHmacSigner 类确实管理身份验证。

signer = new OAuthHmacSigner();
signer.clientSharedSecret = Constants.CONSUMER_SECRET;

然后,Android Activity 使用以下代码启动 OAuth 流程:

launchOauth.setOnClickListener(new View.OnClickListener() 
    public void onClick(View v) 
        startActivity(new Intent().setClass(v.getContext(),
            PrepareRequestTokenActivity.class));
    
);

为了获得 OAuth 2.0 访问令牌,您只需调用:

AccountManager.getAuthToken()

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

【讨论】:

【参考方案4】:

我有两个帐户,但一个不起作用。我所做的是进入 android 的设置,然后进入帐户首选项。我将我的主帐户从无法使用的帐户更改为可以使用的帐户。然后我将新帐户指定为我所有应用程序的主要帐户,包括 google play。这对我有用。有时,如果由于某种原因无法正常工作,您也可以上网并从互联网访问 Google Play 商店。

【讨论】:

【参考方案5】:

尝试获取 dup...文件签名以 .apk 或 .xcode 结尾的重复点

【讨论】:

【参考方案6】:

正如其他人所指出的,这是 Google Play 结算库的一个错误。如果它影响到您,请在 https://issuetracker.google.com/issues/139597485 上为这个问题加注星标,以便 Google 注意到它(真的吗?)并开始着手修复。

【讨论】:

【参考方案7】:

我不确定这是否是您要寻找的答案,但也许设置一个共享的 Google Play 家庭图书馆就足够了。如果需要,它适用于最多 5 位共享相同购买项目(应用、音乐、电影等)的用户。

(参见:https://support.google.com/googleplay/answer/7007852?hl=en)

【讨论】:

以上是关于具有多个帐户的应用内购买的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在属于同一开发者帐户的应用之间共享应用内购买吗?

我们可以在属于同一个开发者帐户的应用之间共享应用内购买吗?

应用内购买,具有不同持续时间的多个自动续订订阅

“找不到您尝试购买的商品” Android 应用内计费

应用内购买的登录弹出窗口(应用内购买自动选择帐户)

跨两个应用保持应用内购买?