2011-03-16 73 views
24

對於有關iTunes訂閱的第100個問題抱歉,但我仍然有一些疑問。在應用程序自動更新訂閱

基本上我在我的應用程序中實現了自動更新訂閱,我想確保自己的答案正確。下面是步驟列表拿,我想出了:

  • 每當用戶購買訂閱,發送回執到服務器,以驗證它
    • 如果收據是有效的,將其保存在數據庫
  • 應用負載,要求服務器如果收到這個UDID存在(這是要弄清楚,如果用戶有一個有效的訂閱)
    • 如果是這樣,檢查是否有EW項目已被添加在商店中的日期範圍從認購起始日期爲到期日
      • 如果有的話,通知大約在某種程度上這些項目中的用戶並將其標記爲可免費下載的

這些步驟是否正確?如果是這樣,爲什麼蘋果的文檔說:

在大多數情況下,您的iOS客戶端應用程序不應該需要改變。事實上,您的客戶端應用程序現在變得更簡單了,因爲您可以使用相同的代碼來恢復自動更新訂閱,就像恢復非消費品產品一樣。這在「恢復事務」中進行了描述。您的應用程序在續訂訂閱的每個時間段都會收到單獨的事務;你的申請應該分別驗證每個收據。

對我來說,它看起來像這樣需要一些代碼來處理所有我所提到的各種情況,來代替。或者我完全錯了。我是嗎?

另外,我怎麼知道訂閱到期日?我找不到在任何地方獲取這些信息的方法。我應該保存在我自己的數據庫?

更新:

,因爲我張貼了這個問題,我已經想通了幾件事情。如果我錯了,隨時糾正我。

首先,我想我應該在自己的數據庫中存儲訂閱的長度,因爲正如蘋果公司的文檔所述,您無法通過Apple的Web服務以任何方式檢索它。實際上,每個訂閱長度都有不同的產品標識符,因此您應該有辦法將產品標識符轉換爲訂閱長度。

另外,Sylvian has posted有關他實施自動更新訂閱的詳細信息,所以至少我知道我的想法沒有太多缺陷。

現在唯一的問題是:我怎麼知道用戶有一個有效的訂閱?我可以將這些信息存儲在我的服務器上,是的,但是如何將用戶與完成的交易相關聯?我應該保存設備的UDID嗎?

+1

你應該檢查出deforums.apple.com而不是問題。沒有人知道答案,但開發人員正在這裏討論它, – honcheng 2011-03-17 00:35:52

+0

@honcheng我張貼在這裏,因爲我找不到答案。 – pt2ph8 2011-03-23 11:58:14

+0

我正在努力解決完全相同的問題,最重要的是識別'同一用戶 - 其他設備'。你有沒有進一步與此? – 2011-04-12 11:38:31

回答

8

我想我找到了解決方案。它不需要額外的用戶名/密碼,它似乎正在工作。

注意:如果您認爲這樣做不合適,請解釋爲什麼在評論中。謝謝。

基本上,無論何時用戶購買訂閱,我都會根據我的服務器驗證收據,並將收據數據存儲在用戶默認值中。然後,當應用程序打開時,或者每當我需要檢查訂閱是否仍然有效時,我都會從用戶默認值中檢索先前保存的收據數據,並根據服務器進行驗證。

我的webservice只是返回訂閱是否仍然有效或已過期,以及一些其他相關信息,如訂閱長度。要做到這一點,它只是照常查詢iTunes服務器,並檢查狀態響應是否爲非零。 21006表示訂閱已過期。

+0

您如何處理多設備用戶? – 2011-04-12 11:23:34

+0

@Kai我有一個'恢復'按鈕,它調用'restoreCompletedTransactions',就像很多其他應用程序一樣 – pt2ph8 2011-04-12 12:11:44

+0

這不是蘋果服務器的一點點開銷嗎?我通常會將驗證過程的過期日期保存到數據庫,但我不能相信蘋果,因爲在沙盒模式中,每月訂閱結束5分鐘後!!爲什麼?有沒有更好的方法來驗證訂閱的長度?我已經閱讀過蘋果文檔,訂閱的長度必須由應用程序(或服務器)計算 – NicTesla 2011-07-07 09:32:31

-1

據我瞭解,蘋果服務器將與您聯繫(或與他的iPhone客戶),並告訴「看看我有一個有效的購買給你」。在您的應用程序內部,您閱讀此消息並解鎖相關內容以供使用。下一步是告訴蘋果服務器你已經回覆了收據,並且蘋果服務器不會再顯示消息。

因此,通過可更新的訂閱,您可以爲每個期間獲得一條新消息。請糾正我,如果我錯了。

30

下面是我們如何實施應用內購買,特別是我公司的新自動更新產品。

應用程序將交易收據傳輸到我們的web服務,如果我們正確處理了應用程序並且Apple可以驗證它,我們會將OK返回給應用程序。在這種情況下,我們更新了用戶帳戶(即數據庫),說「他已經支付並且他的訂閱有效,直到收到有效期」。

在此web服務確定後,應用程序通過另一個web服務重新加載帳戶信息,並查看是否有有效的訂閱。就是這樣......直到自動再生產品出現。

我們現在必須實施一些每天都在運行的CRON工作:我們每天都會列出應該過期的通行證清單,並且我們問Apple是否原始收據仍然有效:神奇的是,回答,有一個字段latest-receipt其中嵌入最新的收據。如果它與我們所擁有的不一樣,我們知道訂閱已自動續訂,我們存儲最新的收據以用於下一次cron檢查,並且我們更新用戶帳戶以延長到期日期。

希望它有幫助。

+0

謝謝。我有一個問題:您說在驗證收據後更新數據庫上的用戶帳戶。但是,你真正用「用戶帳戶」的意思是什麼?它是基於設備的udid的數據庫記錄嗎? – pt2ph8 2011-03-30 12:58:55

+0

我們的客戶必須登錄,以便每個webservice知道用戶打電話給他們。我們在數據庫中有一條記錄,表示該賬戶有訂閱。 – Sylvain 2011-03-31 09:29:14

+0

我已經看到很多應用程序在不使用其他用戶管理層的情況下執行此操作,而只是使用iTunes帳戶。他們是如何做到的呢? – pt2ph8 2011-03-31 12:58:51

-1

如果你的應用程序有一些用戶管理,即你使用用戶名/密碼來使用應用程序,那麼你必須維護一個服務器來記錄當前登錄用戶的購買/合法性。這適用於正常訂購和非消耗品購買。但是,如果您使用新的自動續訂訂閱,那麼無法在該應用中維護多個用戶,因爲:此類購買無法在訂閱期內使用相同的Apple ID進行多次應用程序,我發現它真的很煩人,並找到這種情況下更好的解決方案,即我在應用程序中有多個子帳戶,但我想使用相同的Apple-Id爲每個帳戶購買自動續訂訂閱。我想我必須使用舊的訂閱模式。任何新的想法?

+0

在我的多用戶應用程序中仍在爭奪可再生訂閱。正常訂閱工作正常,但我們想使用新的自動更新。爲應用程序中的每個新用戶選擇不同的productId(相同類型和目的)問題。 :( – Tushar 2011-07-27 05:45:30

+0

您是否爲多用戶應用程序自動更新工作? – Merkidemis 2014-10-10 19:26:03