mainBundle上的appStoreReceiptURL总是返回nil

Joh*_*ell 5 objective-c in-app-purchase ios

此方法appStoreReceiptURL是SKPaymentTransaction上已弃用的transactionReceipt方法的替代方法.每个人都说只是使用这个电话:

NSURL *theURL = [[NSBundle mainBundle] appStoreReceiptURL];
Run Code Online (Sandbox Code Playgroud)

如果有收据,这应该返回收据的URL.但对我来说没有一个,因为这个值是零,而且据我所知,它不应该是.我在iOS 7上运行并且已经完成了一些应用内购买(设备上的沙箱).现在我正在尝试添加另一个应用内购买,自动续订订阅,我需要深入了解收据以获得订阅到期日期.但我无法通过这个简单的步骤,因为价值总是为零.

有谁知道为什么?

Vra*_*das 23

有点晚了,但它可能对某人有用:

-(void) someMethod {
    NSURL *receiptUrl = [[NSBundle mainBundle] appStoreReceiptURL];
    if ([[NSFileManager defaultManager] fileExistsAtPath:[receiptUrl path]])
    {

        NSData *ios7ReceiptData = [NSData dataWithContentsOfURL:receiptUrl];
        //Do stuff

    } else {
        NSLog(@"iOS 7 AppReceipt not found %@, refreshing...",iapID);
        SKReceiptRefreshRequest *refreshReceiptRequest = [[SKReceiptRefreshRequest alloc] initWithReceiptProperties:@{}];
        refreshReceiptRequest.delegate = self;
        [refreshReceiptRequest start];
    }
}

- (void)requestDidFinish:(SKRequest *)request {
    if([request isKindOfClass:[SKReceiptRefreshRequest class]])
    {
        //SKReceiptRefreshRequest
        NSURL *receiptUrl = [[NSBundle mainBundle] appStoreReceiptURL];
        if ([[NSFileManager defaultManager] fileExistsAtPath:[receiptUrl path]]) {
            NSLog(@"App Receipt exists");
            //Do stuff
        } else {
            NSLog(@"Receipt request done but there is no receipt");

            // This can happen if the user cancels the login screen for the store.
            // If we get here it means there is no receipt and an attempt to get it failed because the user cancelled the login.
            //[self trackFailedAttempt];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

`