.蘋果內(nèi)購的相關(guān)功能已經(jīng)上線2年多,蘋果并未在此多有為難碗暗,最近日新增用戶連續(xù)突破新高亩鬼,內(nèi)購收益也跟隨水漲船高,突然在一個(gè)版本上被蘋果審核拒絕烘挫。
其實(shí)主體思想就兩個(gè):1.用戶在不提供手機(jī)號(hào)的情況下(也就是不登錄)也可購買會(huì)員等內(nèi)購相關(guān)內(nèi)容诀艰。2.如果用戶購買了可恢復(fù)購買項(xiàng),在用戶更換設(shè)備后,允許用戶在新的設(shè)備上恢復(fù)自己的相關(guān)權(quán)益其垄。
因?yàn)楦碌倪@個(gè)版本是為適配iOS17上的問題苛蒲,線上用戶已反饋存在崩潰,時(shí)間緊急绿满,所以給蘋果回復(fù)了一個(gè)郵件對(duì)情況做了說明臂外。
鑒于蘋果一貫的審核原則,以為蘋果并不會(huì)理會(huì)而保持拒絕喇颁,但是一天后出現(xiàn)了轉(zhuǎn)機(jī)寄月,蘋果回復(fù)了表示理解的郵件,并先行將此版本進(jìn)行通過審核(此前從未有過)无牵,并督促我方在后續(xù)的版本中添加上述兩個(gè)功能。
?其實(shí)大家都心知肚明厂抖,蘋果雖然言語客氣茎毁,但是下次提交審核,如果沒有添加相關(guān)功能忱辅,肯定被拒七蜘。
以下正式開始解決方案:
1.游客內(nèi)購:
?其實(shí)所謂游客,只是沒有手機(jī)號(hào)等相關(guān)認(rèn)證信息墙懂,如果想購買權(quán)益橡卤,后端需要知道將權(quán)益交付給誰,總要有一個(gè)“人”才行
如果用戶未登錄購買時(shí)损搬,獲取用戶設(shè)備UUID碧库,并存儲(chǔ)到KeyChain中,使用此UUID自動(dòng)注冊(cè)成為一個(gè)賬戶巧勤,并將權(quán)益下發(fā)至此嵌灰。
因?yàn)镵eyChain不與APP綁定,所以及時(shí)APP被刪除后再次安裝也不受影響颅悉。用戶一旦被注冊(cè)成功沽瞭,后續(xù)流程與正常用戶完全相同。
2.恢復(fù)購買:
****************************著重說明剩瓶!可恢復(fù)購買項(xiàng)只有連續(xù)包月****************************
在會(huì)員購買的頁面添加一個(gè)“恢復(fù)購買”的按鈕驹溃,點(diǎn)擊按鈕后判斷當(dāng)前用戶是否是登錄狀態(tài),如果未登錄延曙,依然使用UUID自動(dòng)注冊(cè)一個(gè)用戶
然后調(diào)用:[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 開始執(zhí)行恢復(fù)購買流程
恢復(fù)購買成功后會(huì)進(jìn)入回調(diào):- (void)paymentQueue:(SKPaymentQueue*)queueupdatedTransactions:(NSArray*)transactions
如果回調(diào)值為:SKPaymentTransactionStateRestored? 則恢復(fù)購買成功豌鹤,可以直接按購買流程來添加權(quán)益即可。
注意:如果回調(diào)進(jìn)入了SKPaymentTransactionStatePurchased枝缔,這是正常購買流程中的回調(diào)傍药,此時(shí)要判斷 transaction.originalTransaction 是否有值,如果有值,說明有原始訂單id拐辽,則是恢復(fù)訂閱拣挪,要走恢復(fù)購買流程,如果沒有值俱诸,走正常購買流程菠劝。
?注意代碼中的這個(gè)看似毫無關(guān)系的宏:INTERESTED_LIST_NAME(自行理解,詳情不表)
最后:以上方案的解決版本已成功通過審核并上線睁搭。