所以我有一个需要订阅的应用程序(通过IAP),它提供了一个Today Widget.在窗口小部件(以及应用程序内)中,我使用RMStore检查捆绑包中的App Receipt是否有活动订阅.它在沙盒中工作正常,包括通过TestFlight安装时.但是今天,该应用程序已获得Apple批准,一旦我测试了实时店内版本,当主应用程序看到用户在应用收据中购买时,今日扩展程序没有读取应用程序收据,因此没有订阅!
Today Extension和主应用程序都使用完全相同的代码来阅读应用收据并查找订阅信息.为什么它会在主应用程序中工作而不是扩展?这是一个已知的问题?它与RMStore而不是StoreKit本身有什么关系?我有什么聪明/不同的事情吗?
我想也许问题可能与收据验证有关 - 例如,捆绑标识符在沙盒中与扩展的App Store不同吗?
这真是令人沮丧,因为我没有办法测试任何可能的解决方案而不重新提交到App Store,然后在发布后对其进行测试,如果它被破坏则将其从商店中拉出来,否则我会让用户付费他们实际上没有得到的东西.
in-app-purchase ios rmstore ios8-today-widget today-extension
我正在使用RMStore库- 这就是我目前所拥有的.
1)购买自动续订订阅并验证退回的收据.
[[RMStore defaultStore]addPayment:[Environment environment].premiumProductIAPId success:^(SKPaymentTransaction *transaction) {
[[RMStore defaultStore].receiptVerificator verifyTransaction:transaction success:^{
//enable premium service
} failure:^(NSError *error) {
}];
} failure:^(SKPaymentTransaction *transaction, NSError *error) {
}];
Run Code Online (Sandbox Code Playgroud)
2)在每次应用程序启动时,检查订阅是否为该日期的活动,如果是,则启用高级服务
RMAppReceipt *appReceipt = [RMAppReceipt bundleReceipt];
if (appReceipt){
NSInteger isActive = [appReceipt containsActiveAutoRenewableSubscriptionOfProductIdentifier:[Environment environment].premiumProductIAPId forDate:[NSDate date]];
//enable premium service if active
}
Run Code Online (Sandbox Code Playgroud)
3)如果用户在另一台设备上启动应用程序,则允许他们通过刷新收据来恢复购买(如果存在,并检查购买中是否存在有效订阅).
"In most cases, all your app needs to do is refresh its receipt and deliver the products in its receipt."
Run Code Online (Sandbox Code Playgroud)
- 那是来自指南.这是代码:
[[RMStore defaultStore]refreshReceiptOnSuccess:^{
if ([receipt containsActiveAutoRenewableSubscriptionOfProductIdentifier:[Environment …Run Code Online (Sandbox Code Playgroud) 在我的iOS应用程序中,我使用了自动续订订阅.我们需要一个跨平台的解决方案.我在iOS中使用RMStore购买产品.
在当前场景中:我从服务器获取最新收据didFinishLaunchingWithOptions并向AppStore验证,而RMStoreAppReceiptVerifier不是服务器的更新到期日期.我们始终从两个平台(iOS和Android)更新服务器数据.从iOS方面来说,我们必须在应用程序启动时始终检查收据.当我在续订付款时收到推送通知?如果可能,那么我们当时已经更新了服务器数据
Q-1)如何检查我的新续订流程是否完成?
Q-2)如果用户从iTunes取消了他们的自动续订订阅,我如何通知我以便更新我的数据库?我是否需要一个检查过期订阅的守护程序,以查看用户是否续订?
Q-3)在iOS中.如果我从其他设备登录,那么如何验证来自其他设备的收据?
请建议我如何使用服务器数据库在跨平台处理自动续订订阅.我希望有人可以帮助我.谢谢!
使用iTunes Connect上传应用程序时,Apple会要求您指定您的应用程序是否使用任何加密功能.
RMStore在什么条件下使用加密,以及在将App上传到App Store时如何回答这些问题.

注意:我正在使用cocoapods来获取RMStore

我正在使用RMStore库在我的iOS应用程序中使用自动续订订阅.它适用于购买,但我找不到任何文档如何检查RMStore当前订阅仍然有效?
检查购买产品的代码在这里不起作用:
if([persistence isPurchasedProductOfIdentifier:SUBSCRIPTION_1]) { ... }
Run Code Online (Sandbox Code Playgroud)
此代码始终显示已购买Subscription(因为它是)但不检查此订阅是否已按日期传递.
我在RMAppReceipe.h文件中看到方法" isActiveAutoRenewableSubscriptionForDate " ,但是我没有找到任何文档如何在我的应用程序中使用RMStore重新订阅订阅,以及如何使用isActiveAutoRenewableSubscriptionForDate方法检查此订阅.请帮忙.
简介:我只需要检查订阅@"com.fanfun.apptestsubscription1"是否仍然在TODAY(当前日期)处于活动状态.请提供此简单检查的示例代码.
我知道有很多这些问题,但我找不到有帮助的问题.
我已多次实施IAP,但去年没有实施.事情似乎发生了变化.我在iTunes Connect中创建了IAP项目,他们的状态现在是"等待审核".我正在使用一个名为RMStore的库来简化IAP.
当我使用产品ID打电话购买时,我收到"无效的产品ID错误".在我测试之前,我的IAP项目是否必须通过审核?
编辑:
我做了一些测试.即使我在尝试购买时收到无效的产品ID,我也可以使用相同的产品ID获取产品的详细信息.
这是我收到错误时调用的代码.
[[RMStore defaultStore] addPayment:productID success:^(SKPaymentTransaction *transaction) {
} failure:^(SKPaymentTransaction *transaction, NSError *error) {
}
Run Code Online (Sandbox Code Playgroud)