在WWDC 2013關於處理應用商店收據的討論中,建議iOS應用盡快調用收據驗證代碼。甚至在application:didFinishLaunchingWithOptions:
之前 - 即在main()
函數中。我想,這會的工作方式如下:是否可以從main()調用SKReceiptRefreshRequest?
int main(int argc, char *argv[]) {
@autoreleasepool {
validateReceiptMethod(); // <---- HERE
int retVal = UIApplicationMain(argc, argv, nil, nil);
return retVal;
}
}
的想法是,UIApplicationMain()
方法就是啓動您的應用並調用application:didFinishLaunchingWithOptions:
。如果您在UIApplciationMain()
之後放置validateReceiptMethod()
,它將永遠不會運行。
無論如何,這是行之有效的。但如果沒有收據呢?然後,您需要撥打SKReceiptRefreshRequest
以從應用商店獲取新的付款,這很好。但是,如果您在UIApplciationMain()
之前運行此代碼,它也將在任何UI顯示之前運行。那麼在向用戶顯示蘋果ID登錄對話框方面會發生什麼?是否可以從main()
方法撥打SKReceiptRefreshRequest
?
這是一個好主意。 'validateReceiptMethod()'可以基於發生什麼返回一個INT(例如,如果收據無效,則爲1;如果沒有收到,則返回-1)。有一種簡單的方法可以將返回變量從main()傳遞給'application:didFinishLaunchingWithOptions:',這樣當調用該方法時,它將知道(不必驗證收據的第二次)是否有收據,因此它應該調用'SKReceiptRefreshRequest'並獲得一個新的? – Jason