草庐IT

ios - 非续订订阅是否需要还原按钮?

coder 2023-07-27 原文

我的应用程序被拒绝,因为应用程序购买中未续订上的“恢复”按钮。我是否必须删除还原按钮?如果我必须这样做,那么用户将如何恢复其购买的产品。请提供帮助。

最佳答案

非续订订阅是消耗性的。因此,它们无法还原。因此,恢复按钮是没有意义的。您还需要为用户提供某种身份验证/登录系统。 (有关详细说明,请参见下文。)

资料来源:

  • consumable vs. non-consumable in app purchases
  • non-renewing subscriptions
  • 来自WWDC2017的更新:在Session #303中,App Store工程师Pete Hare在3:00解释说,可以将非续订的订阅视为“具有过期日期的消耗品”


  • 关于非续订订阅是否可消费的评论中已有一些辩论,因此,我想谈一谈。 “消耗品”意味着您可以多次食用它们。就像IP语音电话应用程序中的“通话30分钟”一样。另一方面,有些非消耗品只能购买一次。就像您在游戏应用中解锁所有关卡时一样。您只需购买一次,然后重置设备并重新下载该应用程序,便应该能够恢复购买的交易,因此您无需支付两次即可解锁所有级别。此外,如果您在这种情况下不点击“恢复”按钮,而只是再次购买“解锁所有级别”软件包,则该软件包有效,但不会再次向Apple收费。这就是为什么它被称为非消耗品。这是某种隐喻。苹果是“可食用的”。一旦消耗掉,它就消失了。椅子是非消耗性的。只要您不销毁它或将其赠与就可以拥有它。

    因此,将非续订订阅视为非消耗订阅是有意义的。如果您第二次购买,则不必支付两次,而应使用已经拥有的旧订阅。如果您重置设备,则重新下载该应用后,您应该能够恢复该订阅。恢复不是由Apple完成,而是由应用程序本身完成。

    我仍然认为非续订订阅是可消费的。我使用消耗品与非消耗品的简单定义:应用内购买是消耗品,当从StoreKit API的角度来看,同一用户可以在同一周内多次购买它时。 无法通过StoreKit恢复所有可消耗的IAP项。可以通过StoreKit恢复所有非消耗性IAP项。

    因此,开发人员本人负责恢复非续订订阅的应用内购买,对吗?不,对不起应用程序将如何还原非续订订阅的应用程序内购买?假设我有一台iPod,并且我订阅了1个月的Foo -radio收听服务。现在,我还想在iPad上收听Foo-Radio。如此,我在iPad上安装了Foo-App,然后点击“恢复”按钮。好吧...“还原”按钮应该做什么?如何知道我是否已经购买了“Foo”订阅,它仍然有效多长时间?答:不能。这种方法行不通。

    为了使非续订订阅生效,您必须先登录用户,才能将该订阅绑定(bind)到某个在线帐户。用户名/密码,Open-ID,通过Gmail,Facebook登录等都可以使用。然后,当用户购买n-r订阅时,您必须存储他在某个服务器上订阅的事实并将其链接到他在服务器上的帐户。您还必须防止用户尚未登录时购买n-r订阅。让我们继续上面的iPod/iPad示例。我在iPad上下载了该应用程序,并通过Facebook登录,瞧,我现在可以使用“Foo”订阅。无需“恢复”按钮,因为该应用程序应在登录时检查用户拥有哪些订阅。

    还会有一些其他问题要处理。 (1)例如,什么都不能阻止用户登录200个设备。在这里,问题不在于拥有200台设备的用户,而是一所拥有1000名学生的大学,其中180名学生共享同一帐户。 (2)如果服务器崩溃,某些人可能会丢失其订阅。问题(1)可能导致收入减少。问题(2)可能导致生气和不满意的顾客。

    关于ios - 非续订订阅是否需要还原按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23931586/

    有关ios - 非续订订阅是否需要还原按钮?的更多相关文章

    1. ruby - 我需要将 Bundler 本身添加到 Gemfile 中吗? - 2

      当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/

    2. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

      给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

    3. ruby - 检查数组是否在增加 - 2

      这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

    4. ruby - rspec 需要 .rspec 文件中的 spec_helper - 2

      我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只

    5. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

      我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

    6. ruby - 检查字符串是否包含散列中的任何键并返回它包含的键的值 - 2

      我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案

    7. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

      我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

    8. ruby - 检查日期是否在过去 7 天内 - 2

      我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/

    9. ruby - 如何验证 IO.copy_stream 是否成功 - 2

      这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

    10. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

      我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

    随机推荐