【问题标题】:SKReceiptRefreshRequest asking password everytimeSKReceiptRefreshRequest 每次都询问密码
【发布时间】:2020-02-28 05:41:17
【问题描述】:

我正在使用SKReceiptRefreshRequest 来验证来自服务器的收据。问题是每次提示密码时都会问我。谁能帮我推荐一个更好的方法来验证用户收据

这就是我正在做的事情(我在应用启动时使用refreshReceipt

- (void)refreshReceipt {
    SKReceiptRefreshRequest *refresh = [[SKReceiptRefreshRequest alloc] initWithReceiptProperties:nil];
    refresh.delegate = self;
    [refresh start];
}

- (void)requestDidFinish:(SKRequest *)request API_AVAILABLE(ios(3.0), macos(10.7)) {
    if ([request isKindOfClass:[SKReceiptRefreshRequest class]]) {
        NSLog(@"Got a new receipt...");
        [self verifyReceipt:self.loadingView :NO :^{

        } :^{
            [app_delegate jumpToLogin];
        }];
    }
}

- (void)verifyReceipt :(UIView *)view1 :(BOOL)showHUD : (void (^)(void)) complete : (void (^)(void)) incomplete
{
    if (showHUD) {
        [UtilityManager showHUD:view1];
    }

    /* Load the receipt from the app bundle. */

    NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
    NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];

    if (!receipt) {
        /* No local receipt -- handle the error. */
        [UtilityManager hideHUD:view1];
        incomplete();
        return;
    }

    /* Create the JSON object that describes the request */
    NSError *error;

    // Verify the recipt 

【问题讨论】:

    标签: ios objective-c in-app-purchase


    【解决方案1】:

    在您的情况下,它要求输入密码,因为您的设备上缺少沙盒收据。它正在尝试刷新现有收据,但找不到它。所以它会得到一张新的收据,这就是它要求输入密码的原因。

    在生产中(从 App Store 下载应用时)总会有收据,因此不需要密码。

    你为什么使用SKReceiptRefreshRequest?只有“恢复购买”按钮才需要。

    这是来自我们博客的文章:https://blog.apphud.com/receipt-validation/

    【讨论】:

    • 那么就是说生产环境下不会问了?
    • @MayankPatel 如果该应用是从 App Store 下载的,在SKReceiptRefreshRequest 调用后不会要求输入密码。
    • 好的,我正在使用它,因为我正在使用自动续订订阅,我不想使用恢复购买,并且我没有在基于概念的应用程序中使用恢复购买
    • @apphud 所以假设我正在从设备上为 iTunes 唱歌,我正在那里检查以验证它是否正常工作?
    • @ArbazShaikh 不,它不会询问您是否已注销但收据存在。
    【解决方案2】:

    在设备中购买时保存的receipt_data,只有购买细节。 “in_app”有一个交易详情列表。初始收据将没有交易的取消日期。

    获取非自动续订订阅的 cancel_date 的唯一方法是从代码中调用 SKReceiptRefreshRequest。

    每次我们尝试更新收据时,用户都输入密码非常不方便。我每周调用一次 SKReceiptRefreshRequest 来检查收据更新。

    我也通过创建技术支持事件与 Apple 进行了验证。他们没有更好的方法来解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-20
      • 2015-08-10
      • 2012-06-13
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 2018-10-05
      • 2011-09-23
      相关资源
      最近更新 更多