问题标签 [in-app-subscription]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2364 浏览

android - 如何检查用户是否购买了订阅

在我的 android 应用中,我实现了 in App-Billing,用户可以在应用中购买订阅。当用户启动应用程序时,我想检查他是否有任何订阅,以决定我应该向他展示哪些内容。我正在使用最新的应用内计费库implementation 'com.android.billingclient:billing:1.1' 提前感谢您的帮助

0 投票
0 回答
39 浏览

android - Google Play - 正在跟踪测试交易

财务数据下的测试交易摘要

我正在使用电子邮件地址来测试我的订阅流程。我正在购买产品并在一段时间后取消它,以便我可以重复使用相同的电子邮件地址进行测试。它使用真实数据记录活动订阅和取消订阅,并将数据弄乱。有没有办法不在财务报告下填充这些数据?

0 投票
1 回答
1694 浏览

android - 更改 Play 控制台默认货币

我在英国创建了一个带有商家资料的 google play 帐户。因此,应用内订阅的默认货币为英镑。

当我创建订阅时,它显示信息消息

“列表包括用户使用当地货币付款的国家/地区。在您分发应用程序的其他 61 个国家/地区,将使用您的英镑价格。”

我的要求是使用信息中提到的其他 61 个国家/地区的美元价格。

找到的解决方案之一是具有美国地址的商家帐户。我做不到。

那么,我想知道如果我在其他 61 个国家/地区创建商家帐户,默认货币是什么?

0 投票
0 回答
229 浏览

ios - 如何知道 iOS 订阅是否处于活动状态

我正在向我的应用添加 iOS 应用内订阅。我正在关注 Ray Wenderlich 页面上的这个很棒的教程:

https://www.raywenderlich.com/659-in-app-purchases-auto-renewable-subscriptions-tutorial

基本上本教程遵循以下步骤:

  1. 购买订阅
  2. 收到收据
  3. 在 Apple 中验证收据(这应该通过后端完成,但为简单起见,本教程在应用程序中进行)。
  4. 一旦收据被验证,Apple 就会以 JSON 解析的收据作为响应。
  5. 应用程序将购买的商品存储在本地,并将它们与 sessionID(创建的 UUID)相关联。

完成本教程后,似乎一切正常,但我在 2 个问题上遇到了困难。

每次用户进入应用程序时,都会检查它是否具有有效的 sessionID 和有效的收据:

hasReceiptData 这样做:

这些方法只检查收据是否存在,没有别的。

要检查 currentSessionId,这是方法:

而 currentSessionId 的值是在 Apple 响应收据验证时设置的:

好吧,我的疑问是:

  1. 每次用户进入应用程序时,它只检查 currentSessionId 和收据是否存在,没有别的,所以如果它们存在但订阅已过期,应用程序不知道它并且用户在没有任何活动订阅的情况下继续使用它。我应该怎么做才能避免这种情况?将解析的 JSON 收据本地存储在 UserDefaults 中并检查到期日期?

  2. 而且由于 currentSessionId 不是永久存储的,如果我杀死应用程序并重新启动它,currentSessionId 为空,第一次检查失败,用户无法使用该应用程序。管理此问题的最佳方法是什么?再次在 UserDefaults 中本地存储 currentSessionID?

编辑

看了一些类似的问题,好像每次用户进入应用,在检查currentSessionID和receipt之前,我都要验证本地存储的receipt,是这样吗?

0 投票
1 回答
139 浏览

ios - Iap 购买 - 无需自动续订订阅的试用版

我想实施试用选项,但省略付款。我不想在试用版中使用自动订阅功能,因为它会强制用户在试用期后付费。我只是想让用户在试用期后决定-Apple可以自己处理试用而不进行IAP吗?

0 投票
0 回答
66 浏览

android - iOS 和 Android 是否可以跨平台共享应用内货币或订阅?

我知道我可以让它跨平台共享。然而,在我现在的一个项目中,我们的客户要求让用户购买的应用内货币不能跨平台共享。

我们的客户说这是 Apple 的政策。我没有听说过这个,也找不到这样的文档。

我对Apple开发或Android开发没有那么深入的了解,是否存在这样的政策?

(我看了这个帖子,有人回答没有,不能分享,但是帖子里的评论也说找不到这样的指南。)

0 投票
2 回答
2195 浏览

android - 是否需要启用实时开发人员通知才能在 Android 应用中实现应用内购买?

目前我正在尝试学习如何使用 Google Play Billing Library V1.2 来实现应用内购买 (IAP) - 订阅主要在我的 Android 应用中。

在查看Add subscription-specific features时,我遇到了这个:

此外,在阅读本页的其余部分之前,您还应该启用实时开发人员通知。实时开发者通知允许您主动响应状态变化,增加您的参与度,并减少用户流失率。

当我尝试检查Add real-time developer notifications时,它告诉我需要使用我自己的Google Cloud Platform (GCP)项目设置Cloud Pub/Sub 。然后我检查了 GCP,发现这是一项我似乎无法接受的高薪服务,考虑到这是我正在谈论的第一个应用程序。

所以,我的问题是,在 Android 应用程序中启用实时开发人员通知真的是必须的吗?如果是,我们是否总是需要通过像 GCP 这样的付费服务来实现这一点,或者是否也有任何免费选项?

0 投票
1 回答
703 浏览

xamarin - Plugin.InAppBilling InAppBillingPurchase.PurchaseToken 在生产中有时为空

我正在使用 James Montemagno 的Plugin.InAppBillingXamarin 库来执行 iOS 和 Android 应用内订阅。到目前为止,它基本上工作正常,除了偶尔,仅在 iOS 上,从对andInAppBillingPurchase.PurchaseToken的调用返回 null 。PurchaseAsyncGetPurchasesAsync

例如,在我的恢复购买逻辑中,我有类似这样的代码:

此时,verifiable有时计数 (0) 与purchases(1) 不同。

到目前为止,这似乎发生在用户使用商店信用礼品卡购买时,并且仅在 iOS 上。

另外,我不确定这是否与问题有关,但我没有使用PurchaseAsyncand GetPurchasesAsyncwhich take的重载IInAppBillingVerifyPurchase,因为我专门使用服务器端验证(没有客户端验证)。我的工作流程是进行购买,将生成的InAppPurchase对象添加到队列中进行处理,然后将其作为单独的步骤发送到我们的服务器,以进行验证和与用户帐户的关联。但是,如果这不是一个有效的工作流程,或者如果知道有时 PurchaseToken 数据可以通过IInAppBillingVerifyPurchase.VerifyPurchase但不附加到InAppBillingPurchase从上述方法返回的对象上,我当然想知道这一点。(对于它的价值,我已经阅读了文档并且没有看到任何暗示这一点的东西。)

提前感谢您的帮助。

0 投票
1 回答
696 浏览

android - 用于应用内订阅收据检查的 Google Developer API(权限不足问题)

我想使用Purchases.subscriptions:get。在我的 Django 服务器中

我的 Google API 项目链接到我的 android 应用程序。

我使用了 Google API 的服务帐户(json),服务帐户的权限是项目的所有者和谷歌游戏控制台的管理员。

这是我的代码

这是回应。

怎么了????

0 投票
1 回答
135 浏览

android - 无法通过 Google API 授权

我正在开发一个带有应用内购买的应用,所以我想知道订阅是否过期。我已经有了我的 RefreshToken 和 AccessToken,但是当我试图根据这个获取订阅信息时,我总是得到同样的错误:{“error”:{“errors”:[
{“domain”:“global” ,
“原因”:“authError”,
“消息”:“无效凭据”,
“locationType”:“标题”,
“位置”:“授权”}],
“代码”:401,
“消息”:“无效凭据” }}

我的代码在这里:

请帮忙 ((