首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS回执验证未正常工作

iOS回执验证未正常工作
EN

Stack Overflow用户
提问于 2017-01-27 08:43:28
回答 1查看 477关注 0票数 0

我有一个免费的应用程序(已经在应用程序商店中提供),它有一个不可用的IAP选项,它就像一个高级版本,具有更多的functionalities...minimum部署目标是8.0

我使用RMStore库(https://github.com/robotmedia/RMStore)来验证收据...我意识到,当在已经购买了任何其他应用程序的设备上执行时,验证是不正确的。我的意思是,如果某人在他的设备上(用他对应的Apple ID)在过去已经购买了任何其他应用程序,当进入我的应用程序时,收据验证返回OK (就像这个人也已经购买了我的Premium版本),但它不是:-(

下面是我使用RMStore (在AppDelegate中)进行接收验证的代码:

代码语言:javascript
复制
RMStoreAppReceiptVerifier *_receiptVerifier = [[RMStoreAppReceiptVerifier alloc] init];
[RMStore defaultStore].receiptVerifier = _receiptVerifier;
if (_receiptVerifier.verifyAppReceipt) {
     NSLog(@"PREMIUM VERSION");
     PremiumRM = YES;
} else {
     NSLog(@"NOT PREMIUM VERSION");
     PremiumRM = NO;
}

怎么啦?

顺便说一下,在StackOverFlow的RMStore库和回执验证的其他帖子中,提到了"RMStoreAppReceiptVerificator“库,但我没有它……我需要它作为强制性的吗?(我使用"RMAppReceipt“和"RMStoreAppReceiptVerifier”库)。

EN

回答 1

Stack Overflow用户

发布于 2017-02-01 04:25:50

我按如下所示更改了代码...

代码语言:javascript
复制
- (BOOL)verifyReceiptWithCustomLogic
{
    RMStoreAppReceiptVerifier *verificator = [RMStoreAppReceiptVerifier new];
    if ([verificator verifyAppReceipt])
    {
        return [[RMAppReceipt bundleReceipt] containsInAppPurchaseOfProductIdentifier:_PremiumIdentifier];
    }
    return NO;
}

-(void)PremiumVerification
{
    const BOOL verified = [self verifyReceiptWithCustomLogic];
    if (verified)
    {
        // Verification succeeded
        NSLog(@"PREMIUM VERSION");
        _Premium = YES;
    }
    else
    { // Apple recommends to refresh the receipt if validation fails on iOS
        [[RMStore defaultStore] refreshReceiptOnSuccess:^{
            const BOOL verifiedagain = [self verifyReceiptWithCustomLogic];
            if (verifiedagain)
            {
                // Verification succeeded
                NSLog(@"PREMIUM VERSION");
                _Premium = YES;
            }
            else
            {
                // Verification failed
                NSLog(@"RECEIPT NOT VALID");
                _Premium = NO;
            }
        } failure:^(NSError *error) {
            // Verification failed
            NSLog(@"RECEIPT NOT VALID");
            _Premium = NO;
        }];
    }
}

在AppDelegate的application didFinishLaunchingWithOptions中调用了PremiumVerification,现在它似乎工作正常。

但另一方面,在我看来,在applicationDidBecomeActive中也应该调用PremiumVerification来再次验证来自后台或非活动状态的接收,这是正确的吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41885486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档