我有一个免费的应用程序(已经在应用程序商店中提供),它有一个不可用的IAP选项,它就像一个高级版本,具有更多的functionalities...minimum部署目标是8.0
我使用RMStore库(https://github.com/robotmedia/RMStore)来验证收据...我意识到,当在已经购买了任何其他应用程序的设备上执行时,验证是不正确的。我的意思是,如果某人在他的设备上(用他对应的Apple ID)在过去已经购买了任何其他应用程序,当进入我的应用程序时,收据验证返回OK (就像这个人也已经购买了我的Premium版本),但它不是:-(
下面是我使用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”库)。
发布于 2017-02-01 04:25:50
我按如下所示更改了代码...
- (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来再次验证来自后台或非活动状态的接收,这是正确的吗?
https://stackoverflow.com/questions/41885486
复制相似问题