iOS收据验证工作不正常



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

我使用RMStore库(https://github.com/robotmedia/RMStore)用于收据验证。。。我意识到,在已经购买了任何其他应用程序的设备上执行时,验证是不正确的。我的意思是,如果他的设备中有人(带有相应的苹果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库和收据验证的其他帖子中,提到了"RMStoreAppReceiptVerificationr"库,但我没有……我需要它作为强制性的吗?(我使用"RMAppReceipt"one_answers"RMStoreAppReceiptVerifier"库)。

我更改了代码如下。。。

- (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在AppDelegate的application didFinishLaunchingWithOptions中被调用,现在它似乎工作正常

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

最新更新