版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2018.07.29 |
前言
大家都知道们镜,ios虛擬商品如寶石檐春、金幣等都需要走內(nèi)購况芒,和蘋果三七分成唠椭,如果這類商品不走內(nèi)購那么上不去架或者上架以后被發(fā)現(xiàn)而被下架。最近有一個項(xiàng)目需要增加內(nèi)購支付功能忍饰,所以最近又重新集成并整理了下贪嫂,希望對大家有所幫助。感興趣的可以參考上面幾篇艾蓝。
1. iOS內(nèi)購IAP(一) —— 基礎(chǔ)配置篇(一)
2. iOS內(nèi)購IAP(二) —— 工程實(shí)踐(一)
3. iOS內(nèi)購IAP(三) —— 編程指南之關(guān)于內(nèi)購(一)
4. iOS內(nèi)購IAP(四) —— 編程指南之設(shè)計(jì)您的應(yīng)用程序的產(chǎn)品(一)
5. iOS內(nèi)購IAP(五) —— 編程指南之檢索產(chǎn)品信息(一)
6. iOS內(nèi)購IAP(六) —— 編程指南之請求支付(一)
7. iOS內(nèi)購IAP(七) —— 編程指南之促進(jìn)應(yīng)用內(nèi)購買(一)
8. iOS內(nèi)購IAP(八) —— 編程指南之提供產(chǎn)品(一)
9. iOS內(nèi)購IAP(九) —— 編程指南之處理訂閱(一)
Restoring Purchased Products - 恢復(fù)購買的產(chǎn)品
用戶恢復(fù)交易以維持對已購買內(nèi)容的訪問權(quán)限力崇。例如,當(dāng)他們升級到新手機(jī)時赢织,他們不會丟失他們在舊手機(jī)上購買的所有商品亮靴。在您的應(yīng)用中包含一些機(jī)制,讓用戶恢復(fù)購買于置,例如Restore Purchases
按鈕茧吊。恢復(fù)購買會提示用戶的App Store憑據(jù)八毯,這會中斷您的應(yīng)用流量:因此搓侄,請勿自動恢復(fù)購買,尤其是每次啟動應(yīng)用時都不會话速。
在大多數(shù)情況下讶踪,您的所有應(yīng)用程序需要刷新收據(jù)并在收據(jù)中交付產(chǎn)品。刷新的收據(jù)包含用戶在此應(yīng)用程序泊交,此設(shè)備或任何其他設(shè)備上購買的記錄乳讥。但是,由于以下原因之一廓俭,某些應(yīng)用需要采用其他方法:
- 如果您使用Apple托管的內(nèi)容云石,則恢復(fù)已完成的交易會為您的應(yīng)用程序提供用于下載內(nèi)容的交易對象。
- 如果您需要支持早于iOS 7的iOS版本(應(yīng)用程序收據(jù)不可用)研乒,請恢復(fù)已完成的交易留晚。
- 如果您的應(yīng)用使用非續(xù)訂訂閱,則您的應(yīng)用負(fù)責(zé)恢復(fù)過程。
刷新收據(jù)會向App Store詢問收據(jù)的最新副本错维。 刷新收據(jù)不會創(chuàng)建任何新交易奖地。 雖然您應(yīng)該避免連續(xù)多次刷新,但此操作與僅刷新一次的結(jié)果相同赋焕。
恢復(fù)已完成的事務(wù)會為用戶完成的每個已完成事務(wù)創(chuàng)建一個新事務(wù)参歹,實(shí)質(zhì)上是為事務(wù)隊(duì)列觀察者重放歷史記錄。 在恢復(fù)事務(wù)時隆判,您的應(yīng)用程序會維護(hù)自己的狀態(tài)犬庇,以跟蹤恢復(fù)已完成事務(wù)的原因以及如何處理它們。 多次還原會為每個已完成的事務(wù)創(chuàng)建多個已還原的事務(wù)侨嘀。
注意:如果用戶嘗試購買已購買的產(chǎn)品臭挽,而不是使用應(yīng)用程序的恢復(fù)界面,則App Store會創(chuàng)建常規(guī)事務(wù)而不是恢復(fù)事務(wù)咬腕。 不再向用戶收取產(chǎn)品費(fèi)用欢峰。 處理這些交易的方式與處理原始交易的方式完全相同。
為用戶提供對重新下載的內(nèi)容的適當(dāng)控制級別涨共。 例如纽帖,不要一次下載三年的日報或數(shù)百兆的游戲關(guān)卡。
Refreshing the App Receipt - 刷新應(yīng)用程序收據(jù)
創(chuàng)建收據(jù)刷新請求举反,設(shè)置委托懊直,然后啟動請求。 該請求支持在測試期間以各種狀態(tài)獲取收據(jù)的可選屬性火鼻,例如過期收據(jù) - 有關(guān)詳細(xì)信息室囊,請參閱SKReceiptRefreshRequest的initWithReceiptProperties:方法的值。
request = [[SKReceiptRefreshRequest alloc] init];
request.delegate = self;
[request start];
收據(jù)刷新后魁索,檢查并交付任何已添加的產(chǎn)品波俄。
Restoring Completed Transactions - 恢復(fù)已完成的交易
您的應(yīng)用程序通過調(diào)用SKPaymentQueue的restoreCompletedTransactions方法啟動該過程。 這會向App Store發(fā)送請求蛾默,以恢復(fù)所有應(yīng)用已完成的交易懦铺。 如果您的應(yīng)用為其支付請求的applicationUsername
屬性設(shè)置了值,如Detecting Irregular Activity中所述支鸡,請使用restoreCompletedTransactionsWithApplicationUsername:方法在還原事務(wù)時提供相同的信息冬念。
App Store為先前完成的每個事務(wù)生成新事務(wù)。 已還原的事務(wù)具有對原始事務(wù)的引用:SKPaymentTransaction的實(shí)例具有originalTransaction屬性牧挣,并且收據(jù)中的條目具有Original Transaction Identifier
字段急前。
注意:日期字段對恢復(fù)購買的含義略有不同。 有關(guān)詳細(xì)信息瀑构,請參閱Receipt Validation Programming Guide中的
Purchase Date and Original Purchase Date
字段裆针。
對于每個恢復(fù)的事務(wù)刨摩,將調(diào)用狀態(tài)為SKPaymentTransactionStateRestored的事務(wù)隊(duì)列觀察器,如Waiting for the App Store to Process Transactions中所述世吨。 您此時采取的操作取決于您的應(yīng)用程序的設(shè)計(jì)澡刹。
- 如果您的應(yīng)用使用應(yīng)用收據(jù)并且沒有Apple托管的內(nèi)容,則不需要此代碼耘婚,因?yàn)槟膽?yīng)用無法恢復(fù)已完成的交易罢浇。 立即完成任何恢復(fù)的事務(wù)。
- 如果您的應(yīng)用使用應(yīng)用收據(jù)并且擁有Apple托管的內(nèi)容沐祷,請讓用戶在開始恢復(fù)過程之前選擇要恢復(fù)的產(chǎn)品嚷闭。 在恢復(fù)期間,重新下載用戶選擇的內(nèi)容并立即完成任何其他事務(wù)赖临。
NSMutableArray *productIDsToRestore = <# From the user #>;
SKPaymentTransaction *transaction = <# Current transaction #>;
if ([productIDsToRestore containsObject:transaction.transactionIdentifier]) {
// Re-download the Apple-hosted content, then finish the transaction
// and remove the product identifier from the array of product IDs.
} else {
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}
- 如果您的應(yīng)用不使用應(yīng)用收據(jù)胞锰,則會在恢復(fù)后檢查所有已完成的交易。 它使用與原始購買邏輯類似的代碼路徑來使產(chǎn)品可用兢榨,然后完成交易嗅榕。
具有多個產(chǎn)品的應(yīng)用程序(尤其是具有相關(guān)內(nèi)容的產(chǎn)品)允許用戶選擇要恢復(fù)的產(chǎn)品,而不是一次性恢復(fù)所有產(chǎn)品色乾。 這些應(yīng)用程序會跟蹤哪些已完成的事務(wù)在恢復(fù)時需要處理誊册,哪些事務(wù)可以通過立即完成來忽略领突。
后記
本篇主要講述了恢復(fù)購買的產(chǎn)品暖璧,感興趣的給個贊或者關(guān)注~~~~