2013-07-30 59 views
3

繼蘋果指南,自動再生訂閱是可恢復 - >設備可以發送restoreCompletedTransactions Apple服務器和蘋果公司將與所有完成的事務列表響應。恢復過期自動再生訂閱

我的問題是,是否蘋果發送所有已完成的交易曾經? (僅與購買非消費品和自動更新訂閱,ofc相關)

例如:在我的應用中有月度自動續訂訂閱。用戶在2012年1月安裝我的應用程序。2012年5月,他禁用訂閱自動更新。一年後,2013年1月,他再次訂閱。 2013年3月,他再次禁用訂閱自動更新。最後,在2013年6月,他再次訂閱。 2013年7月他嘗試使用「恢復購買」功能,Apple會發送什麼信息?

將蘋果發送到該設備的哪些信息?蘋果會發送關於所有訂閱的信息,甚至是那些過期的訂閱嗎?

P.S.問題的感覺是獲得使用自動更新訂閱並恢復關於它們的信息的真實體驗。在沙箱中測試有時會返回非常奇怪的結果。

編輯:好了,所以我有足夠的測試說,這,蘋果將所有已完成的交易永遠,包括交易,使用過期訂閱連接,即使有其他訂閱後它。

回答

1

「Store Kit提供內置功能來恢復非消耗性產品,自動更新訂閱和免費訂閱的事務處理爲了恢復事務處理,應用程序調用支付隊列的restoreCompletedTransactions方法,付款隊列向App Store恢復事務作爲回報,App Store爲以前完成的每個事務生成一個新的恢復事務恢復事務對象的originalTransaction屬性保存了原始事務的一個副本應用程序通過檢索原始事件來處理恢復事務。交易並用它來解鎖所購買的內容後商店套件恢復所有以前的交易,它通過調用其paymentQueueRestoreCompletedTransactionsFinished通知支付隊列觀察:方法「 - 蘋果文檔

-1

嗯,是的,你會得到所有的購買捆綁到的Apple ID(包括已過期)。您可以在代理回調中將其過濾出來,並只將最近的一個發送到您的服務器。

- (void)handleRestoredTransaction:(SKPaymentTransaction *)transaction 
{ 

NSLog(@"Somehow a transaction was restored."); 

NSDate* receiptPurchaseDate = transaction.transactionDate; 
NSDate* currentDate = [NSDate date]; 

NSTimeInterval daysPassedSincePurchase = [currentDate timeIntervalSinceDate: receiptPurchaseDate]/SECONDS_PER_DAY; 

if ([transaction.originalTransaction.payment.productIdentifier isEqualToString: monthlySubscriptionProductIdentifier]) 
{ 
    if (daysPassedSincePurchase <= DAYS_PER_MONTH) 
    { 
     // send the transaction receipt to your servers. 
     [self handlePurchasedTransaction: transaction]; 
    } 
} 
else if ([transaction.originalTransaction.payment.productIdentifier isEqualToString: yearlySubscriptionProductIdentifier]) 
{ 
    if (daysPassedSincePurchase <= DAYS_PER_YEAR) 
    { 
     [self handlePurchasedTransaction: transaction]; 
    } 
    } 
}