0

我有一个免费的应用程序(已经在 App Store 中提供),它有一个非消耗性 IAP 选项,它就像一个具有更多功能的高级版本......最低部署目标是 8.0

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

以下是我使用 RMStore(在 AppDelegate 中)验证收据的代码:

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”库代替)。

4

1 回答 1

0

我将代码更改如下...

- (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;
        }];
    }
}

PremiumVerification 在application didFinishLaunchingWithOptionsAppDelegate 中被调用,现在看来工作正常。

但另一方面,在我看来,还应该调用 PremiumVerificationapplicationDidBecomeActive来再次验证来自后台或非活动状态的收据,对吗?

于 2017-01-31T20:25:50.163 回答