應(yīng)用內(nèi)購時(shí)我們需要將蘋果支付返回的票據(jù)發(fā)給服務(wù)器,所以我們需要先獲取這一塊的票據(jù)信息.
但是由于iOS系統(tǒng)的不斷升級(jí),獲取票據(jù)信息的方法有所改變,而且最新的票據(jù)信息返回的格式與之前有所不同(新的方法返回的信息會(huì)包含一些其他的字典信息),如果使用兼容版本的代碼就會(huì)導(dǎo)致服務(wù)器解析不了我們上傳的票據(jù)信息.
這里的處理方案有兩種:
1:客戶端將處理返回的票據(jù)信息,將信息重新封裝成服務(wù)器識(shí)別的json格式.
2:服務(wù)器端做兼容處理,對(duì)新的票據(jù)信息進(jìn)行另外的一種方式的解析.
#pragma mark - 獲取蘋果返回的票據(jù)信息
- (NSData*)receiptWithTransaction:(SKPaymentTransaction*)transaction {
NSData *receipt = nil;
if ([transaction respondsToSelector:@selector(transactionReceipt)]) {
//Works in iOS3 - iOS7, deprected since iOS7, actual deprecated (returns nil) since iOS9
receipt = [transaction transactionReceipt];
}
#warning -- 注意,此處關(guān)于蘋果票據(jù)信息的處理,舊的方法transactionReceipt在iOS7.0后被廢棄了.但iOS8以后新的處理方式返回的票據(jù)信息格式比較之前有所變化,需要服務(wù)器去處理,暫時(shí)注釋此處的兼容操作,任然使用iOS7.0下的transactionReceipt方法.
// if ([[NSBundle mainBundle] respondsToSelector:@selector(appStoreReceiptURL)]) {
// NSURL *receiptUrl = [[NSBundle mainBundle] appStoreReceiptURL];
// receipt = [NSData dataWithContentsOfURL:receiptUrl];
// } else {
// if ([transaction respondsToSelector:@selector(transactionReceipt)]) {
// //Works in iOS3 - iOS8, deprected since iOS7, actual deprecated (returns nil) since iOS9
// receipt = [transaction transactionReceipt];
// }
// }
return receipt;
}