问题标签 [non-renewing-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 回答
1396 浏览

ios - 非续订订阅恢复

背景:

Apple 要求您对此类购买实施恢复机制,以让用户在擦除设备后取回购买或查看来自用户其他设备的购买。

苹果公司接受的一种方法是进行可选的用户注册并在您的服务器上处理它以保存交易收据。因为苹果不像其他类型的购买那样做非消耗品。这使您可以获取用户的所有收据以恢复它们。

苹果表示,注册应该是可选的。但我们必须向用户说明需要注册才能查看从其他设备购买的商品。

我建议的方法:

我将通过将购买收据保存在 iCloud 中来实现恢复机制。我将指出需要登录 iCloud 才能从用户的其他 iOS 设备访问订阅内容。

在购买成功的应用程序。将检查 iCloud 是否可用于保存订阅详细信息(交易收据)否则,订阅将保存到用户默认值。每次应用程序。启动它会检查 iCloud 是否可用并且 iCloud 将与用户默认值同步。用户默认值而不是 iCloud 上可用的订阅详细信息将被复制到 iCloud,并且 iCloud 上而不是用户默认值上可用的订阅将被复制到用户默认值。

这为用户提供了在未来登录 iCloud 的灵活性,只是为了将他们的订阅转移到另一台设备上,或者在他们决定删除应用程序之前。保存他们的订阅。(这一切都将完全按照我们的用户注册选项执行)。这被接受了吗?

另一件事。我的应用程序。假设也可以在 iOS 4.x 上工作。这意味着 iCloud 不可用。这也行吗?或者我必须放弃正在运行的应用程序。如果我想使用 iCloud 方法,在 iOS 4.x 上?如果我还指出 iOS 4.x 将无法进行恢复怎么办?

0 投票
0 回答
333 浏览

ios - iCloud 和应用内不可再生购买

Apple 使开发人员能够在 iCloud 中保存购买(交易或收据)。

我有一个应用程序。这样做是为了保存不可再生产品的收据,因为苹果提出的另一个可用选项是实施由我的服务器管理的用户注册,这很容易保护我的内容(用户可以将他们的帐户传播给他们的同学(30 名学生) )查看他们购买的内容)。

要记住的信息

这些是允许用户从其他设备查看内容的唯一可用选项(至少我知道的选项)。因为苹果没有此类产品的恢复功能(不可再生)。如果您要求[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]此类产品paymentQueue:updatedTransactions:将不会被调用,只会paymentQueueRestoreCompletedTransactionsFinished:被调用。

问题 - 什么会阻止用户将他们的 iCloud 帐户传播到世界各地?用户可以创建一个苹果帐户,仅将其用于 iCloud,仅将我的交易收据移动到它。班主任可以这样做并将此帐户提供给他的学生。

0 投票
1 回答
393 浏览

ios - 如何防止用户分享他们的苹果 ID 进行应用内购买

我正在实施一个应用程序内购买类型的应用程序:非续订订阅。

根据苹果文件:

如果您的应用使用非续订订阅,则您的应用负责恢复过程。

从这里

我的问题是,如果苹果强制恢复,如何防止成千上万的用户共享一个只有一个描述的苹果帐户?

例如,如果在我的应用程序中,您支付 0.99 美元可以使用该应用程序 10 天,根据苹果的要求,用户必须能够在 10 天内在他/她的任何设备上使用该应用程序,只需输入凭据。但是,如果用户设置一个简单的帐户凭据并与 100 人共享,那么这 100 人不必再购买订阅,并且可以在 10 天内免费使用该应用程序。

有些人一直断言人们不会分享他们的帐户……你怎么知道的?我看到有人注册了一些apple id,用于共享应用和游戏,并且只需要支付一次。

此外,我没有实现自己的服务器,我的应用程序也不需要。有没有办法防止这种情况?

提前致谢

0 投票
3 回答
3572 浏览

ios7 - 非续订订阅:从收据中删除?

我正在为我的应用(即将发布)实施应用内购买,并为 iOS6 和 iOS7 提供支持。我的问题与 iOS6 和 iOS7 之间的非续订订阅机制之间的差异有关,更具体地说,是关于如何实现恢复。为了同时适应 iOS6 和 iOS7,我实现了一个服务器端解决方案来启用恢复。我可以选择允许用户创建一个用户名/密码,该用户名/密码可用于不同的设备(如果数据丢失,则为同一设备)进行恢复。我的大部分工作基本上都在工作,但是随着我的测试的进行,我发现了一些奇怪的东西。

我的 iOS7 恢复过程的初始部分使用 SKReceiptRefreshRequest 来刷新应用程序中的收据。当我从 iOS7 设备上删除应用程序时,重新安装(此时没有收据;使用 iExplorer 测试)并进行恢复,SKReceiptRefreshRequest 恢复 10 次购买(我在测试期间为这个特定用户创建的) . 其中一张是非消耗品,九张收据是不可更新的。这让我很困惑。从 Apple 文档中,我只希望在刷新的收据中看到非消耗品购买。来自https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateLocally.html

“消耗品和非续订订阅:在购买时将消耗品或非续订订阅的应用内购买收据添加到收据中。它会保存在收据中,直到您的应用完成该交易。在那之后,它会在下次更新收据时从收据中删除 - 例如,当用户进行另一次购买或您的应用显式刷新收据时。”</p>

关于非续订订阅,来自https://developer.apple.com/in-app-purchase/In-App-Purchase-Guidelines.pdf

使用 iCloud 或您自己的服务器来跟踪购买并允许用户将购买的订阅恢复到单个用户拥有的所有 iOS 设备

下表来自(https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Products.html

在此处输入图像描述

有人有任何见解吗?

问题:为什么 SKReceiptRefreshRequest 会在收据中留下非续订产品的购买?这是 Apple 文档中的错误还是发生了其他事情?

2014 年 2 月 23 日;更新:我最近向 Apple 提交了一份错误报告。还没有回音。虽然,实际上,我不希望这个“错误”消失!

2015 年 10 月 20 日;更新:看来苹果实际上已经解决了这个“错误”。现在,当我使用SKReceiptRefreshRequest(这似乎是 Apple 推荐的还原方法,请参阅https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Restoring.html)进行恢复时,我现在没有收到收据中显示的非续订订阅购买。我只得到非消耗品(我的应用只有非续订订阅和非消耗品购买)。在我写完这篇文章后,我将立即向 Apple 提交一份错误报告,因为他们的文档对预期的行为模棱两可。

到目前为止,我对此的测试包括我在 iOS 8.4 和 iOS9 上运行的应用程序(实际上是 9.1 测试版,因为我没有合适的设备运行生产版本),所以这似乎是 Apple 的服务器端更改,而不是严格说 iOS/设备方面的变化。另请注意,到目前为止,我的所有测试都是在我的应用程序的开发版本上进行的,在应用程序内购买沙箱中也是如此。我很快就会进行生产测试。

2015 年 12 月 3 日;更新; 在 Apple 技术支持的提示下,我进行了更多测试。这一次,在运行 iOS9.2 beta 4 (13C75) 的 iPad 上。看来我们现在已经恢复“正常”了,不再订阅了。也就是说,当我进行恢复时,我再次在收据中看到非续订订阅。

0 投票
2 回答
2249 浏览

ios - iOS 应用因购买类型错误而被拒绝

我在我的应用程序中遇到了应用程序内购买拒绝问题之一,需要一些帮助。

这个应用内有什么用?

在我们的应用程序中,我们可以选择让用户成为高级用户。用户可以成为高级用户以享受一些好处,并且与时间相关。有两个定义它们的应用内产品

  1. 一个月的高级服务。
  2. 一年优质服务。

由于这些是基于时间的服务,用户期望一旦他/她在指定时间内从他/她的所有其他设备购买产品,这些服务应该可供该用户使用。为了跟踪用户是否是高级服务用户,一旦购买完成,应用程序会在服务器中写入一个关于高级服务的条目。因此,当用户使用其他设备并登录时,他/她可以毫无问题地享受优质服务。出于这个原因,我将上述产品创建为“消耗品”,认为它是由我们的服务器控制的,不会有任何问题。但苹果拒绝了,并要求我将产品更改为“非续订订阅”。

这是苹果对此的评价

我们发现您的一个或多个 In App Purchase 产品的可购买性类型设置不当,这不符合 App Store 审核指南。

“1 个月和 1 年的高级帐户服务”IAP 设置为消耗品。

但是,根据产品功能,使用“应用内购买不可更新订阅”类型更为合适,因为您的应用程序提供的服务需要用户预付费才能访问内容或接收服务。

一旦创建了应用内购买产品,就无法更改可购买性类型。因此,您需要创建一个具有正确可购买性类型的新应用内购买产品。要在 iTunes Connect 中创建新的应用内购买,请转到管理您的应用内购买,选择您的应用,然后单击“新建”。当前产品将在 iTunes Connect 中显示为“已拒绝”。

不可再生订阅内容必须可供单个用户拥有的所有 iOS 设备使用,如 App Store 审核指南的指南 11.6 中所述:

11.6 使用 IAP 的内容订阅必须至少持续 7 天,并且用户可以从他们的所有 iOS 设备上使用

如果您选择使用用户注册来满足此要求,请记住,要求用户注册是不合适的。此类用户注册必须是可选的。向用户明确说明,只有通过注册,他们才能访问所有 iOS 设备上的内容。如果他们希望在未来访问其他 iOS 设备上的内容,并为他们提供一种稍后注册的方式。

有关可购买性类型的更多信息,请参阅 iTunes Connect 开发人员指南。

现在我已经创建了新的应用内产品,这些产品是非更新的。但这与我之前提到的工作方式相同,即服务器跟踪用户是否是高级用户,到期日期。当用户转到其他设备并登录时,该应用程序会知道用户是否是高级用户并基于该应用程序的工作。

但我对此有几个问题,

  1. 我是否需要在应用程序中提供“恢复”按钮?如果是这样,目的是什么以及它是如何工作的?
  2. 由于用户只有在登录应用程序后才能访问此服务(它与应用商店帐户不同)。这两个登录名会有什么问题吗?

请分享您的宝贵意见。

0 投票
1 回答
139 浏览

ios - 2 在 iOS 中的一个应用程序中的应用程序购买模块

我在使用电话间隙开发的 iOS 应用程序中有 2 个应用内购买。我正在使用 inappPurchaseManager.js 来实现应用内购买。

https://github.com/usmart/InAppPurchaseManager-EXAMPLE

第一个应用内是非消耗品,第二个是非更新应用内。在恢复应用内购买的情况下,我使用了以下代码。

但是虽然我已经购买了第一个和第二个应用内产品,这个功能只会返回第一个应用内产品名称。我不知道我是否理解这个代码或处理错误。请给我适当的指导。我正在使用苹果用于测试此功能的测试帐户。

0 投票
2 回答
107 浏览

ios - 我应该使用哪种应用内购买?

在我的应用程序中,我希望用户购买备份、同步等订阅。

所以我发现Apple提供两种订阅IAP:

  • 不可更新订阅
  • 自动更新订阅

鉴于我没有服务器,并且我依靠 iCloud 进行同步,我应该使用哪个?

0 投票
1 回答
250 浏览

in-app-purchase - 非续费 IAP 注册表:是否允许索取个人信息?

我的应用具有非续订订阅(应用内购买)。注册是可选的,但建议。目前我要求提供电子邮件地址和密码。苹果对此表示同意。

有没有人有过是否允许要求更多的经验?例如名字/姓氏、公司、电话号码(甚至可能是可选的)?


编辑:我更新了我的应用程序以要求提供额外的注册数据,但只有公司、电子邮件地址和密码是必需的。我不知道审稿人是否忽略了应用程序中的这一变化,或者这样做是否可以,但它通过了审查。

0 投票
3 回答
568 浏览

ios - 多个不可更新订阅

对不起,但我对实施不可更新订阅有点困惑。

应用程序的基本概念是用户可以在应用程序内发布商品进行销售。对于要发布的每件商品,他必须支付 0.99 美元。此项目将保留 20 天。

根据苹果文档,这种应用内购买应该是不可更新的订阅,到期逻辑要在服务器端实现。我已经完成了创建不可再生 IAP 和与应用程序集成等所有工作。服务器维护每个项目的到期时间。

现在我的查询是因为用户可以发布他想要的任意数量的项目,应该如何维护 IAP id。

用户案例 #1: - 用户 A 在为此支付 0.99 美元后发布了一件商品。到目前为止,一切都很好。- 当他尝试发布下一个项目时,他会看到消息“你已经购买了这个,点击以更新或延长它”而不是“你想以 0.99 美元购买一个 xxx”我在这里错过了什么吗?

用例 #2:现在说项目已过期(20 天后),我应该使用相同的 IAP id(IAP 中的产品 ID)进行续订吗?或者我需要创建不同的 IAP id?

请指导我,以便Apple不会拒绝该应用程序。

提前致谢!!

0 投票
0 回答
400 浏览

ios - 有什么方法可以避免 iOS 上非自动续订订阅的双重“购买”对话框?

所以在这个问题发生 2 年后:您已经购买了此订阅。点击购买以续订或延长它

我仍然看到在续订非自动续订订阅时,即使订阅已经过期,用户也会获得 2 个“购买”对话框:

第一个对话框:“确认您的应用内购买”

第二个对话框(在第一个对话框上单击购买后):“您已经购买了此订阅,点击购买以续订或延长它”。

真的没有办法避免吗?我现在正在沙箱中进行测试,但没有理由认为它在生产中有所不同。用户现在可以看到 3 个对话框(1 个用于输入 App Store 的密码,然后是 2 个对话框)。