2012-07-19 95 views
2

問:
凡在iOS設備上可信息(只有幾個字節,在我的情況下,僅1位)小片被保存,讓他們保持可用後,應用程序會從手機中刪除並重新安裝以後再來?哪裏應該持久數據存儲在iOS?

背景:
我正在開發一個應用程序,它將免費進入appstore。與應用程序一起提供免費的測試包。此測試包可在有限時間內訪問我服務器上的有限數量的項目。如果用戶想要,他/她可以購買額外的包裝以獲得更多物品並且持續更長的時間。

要使用這個軟件包,每個用戶都必須在我的服務器上創建一個帳戶。很容易確保每個賬戶只能使用一個免費套餐。但我沒有看到讓用戶創建其他帳戶的方式。所以我想要更多:

我想,每個用戶(每個活人)只能使用一個免費軟件包,獨立於他/她將創建的帳戶數目。

我知道,在用戶(活人)的層面限制這一點是不可能的。但要在手機上對它進行回覆是可以接受的,因爲我相信,在同一時間沒有多少人使用更多的2或3部iPhone。如果一個人在3種不同的iPhone上使用我的應用程序只是爲了能夠使用3個不同賬戶的3個免費套餐,那麼這是我可以接受的。

但是爲了做到這一點,我需要將信息存儲在手機的某個地方,與應用一起交付的免費軟件包已經在使用中。但是,當用戶卸載應用程序並稍後重新安裝應用程序時,該信息仍然必須可供應用程序使用。而且我不知道在從手機中刪除應用程序後,這些微小的1位信息將保存在哪裏。

你能幫忙嗎?

+0

我不認爲蘋果會批准商店中應用的「有限時間功能」。無論您提供什麼,它都應該是時間無限的。 – 2012-07-19 10:50:18

+0

@ranReloaded:應用程序的功能不受時間限制。免費套餐的有效性是有限的。付款的軟件包也會有一個到期日期。另見我對rockoenes的回答的評論。 – 2012-07-19 11:08:41

回答

1

我剛剛找到答案:存儲在鑰匙扣中的數據將保留在那裏,即使應用程序被刪除並且可以在重新安裝後從同一應用程序訪問。這正是我需要的。
只有徹底重新安裝固件才能刪除條目,但這也會刪除其他每個應用程序的其他條目。人們不會經常這樣做,我認爲這只是爲了讓我的應用獲得額外的免費軟件包而矯枉過正。這是我可以接受的。

Apple爲keychain訪問提供了一個示例應用程序。我沒有詳細閱讀本例中,應用程序,但我舒爾它包含了我需要的一切:http://developer.apple.com/library/ios/#samplecode/GenericKeychain/Introduction/Intro.html


編輯:

存儲信息的通用密碼是最好的解決辦法對我的問題,但蘋果exam​​ple-app有一個錯誤。在這個bug中是一個用作存儲通用密碼的「唯一鍵」的錯誤屬性。有關更多詳情以及如何讓keychain-items真正獨一無二地看待這個問題:What makes a keychain item unique (in iOS)?

1

iOS中沒有這樣的地方可用。如果應用程序被刪除,您可以使用KeyChain存儲一些數據以保留。但是,如果用戶清除設備,這些設置將會進行。

有沒有辦法做到這一點,使一個免費的應用程序不應該限制使用的時間,但更多的功能。

+1

該應用程序允許用戶在我的服務器上存儲有關書籍和其他媒體的數據。數十年來,我不想讓我的服務器從數千個免費軟件包中填充未使用的數據。我想有一天擺脫這些數據,這就是爲什麼免費軟件包和付費軟件包有一個到期日期(免費:1個月,支付:1,2或5年)。通過購買額外的軟件包,可以輕鬆延長付費套餐。軟件包還可以通過可存儲物品的數量進行擴展(免費:20,支付:200,500,1000,甚至更大的軟件包) – 2012-07-19 10:52:54

+0

Mmhh ...這些「時間有限的軟件包」是某種In App Purchase產品嗎?訂閱,也許? – 2012-07-19 11:11:59

+0

@ranReloaded:是的,但該服務不僅可通過iPhone使用。也會有一個網站,您也可以在該網站上購買軟件包。 – 2012-07-19 11:18:33

2

解決此問題的最簡單方法是將iPhone UniqueDeviceId存儲在您的服務器上。然後,當有人嘗試從設備註冊帳戶時,您可以檢查設備是否已創建帳戶。

Apple從SDK中刪除(折舊)UDID,所以另一種方法是使用在GitHub上可用的OpenUDID。這會給你一個唯一的ID來標識一個設備:

OpenUDID - GitHub

+2

你不應該這樣做,因爲你沒有識別用戶,而是設備。所以如果我出售我的iPhone,新的所有者將無法使用您的應用程序「演示」。但是,如果您將帳戶與UDID(或OpenUDID)關聯起來,新所有者會看到我的數據可能會更糟。 – rckoenes 2012-07-19 10:40:40

+0

我知道UDID已從IOS中棄用,但我不知道有類似OpenUDID的東西。這聽起來像個好主意,我會看看它。 – 2012-07-19 10:43:55

+0

@ rckoenes:好的反感。但我認爲有人在我的應用程序以前使用的二手iPhone上安裝我的應用程序的機會非常低。但我會考慮這個。 – 2012-07-19 11:02:52

1

這是我做的休伯特Schölnast:

  1. 我的應用程序需要登錄,這樣每個人都必須擁有有效的登錄用戶名和密碼。

  2. 該應用程序正在使用UUID而不是UDID或任何替代品,每當應用程序與服務器對話時,它都會將UUID和用戶身份都發送到服務器。

  3. 在服務器端,我有數據庫表存儲用戶的身份和他們的UUID。

  4. 在服務器端,在代碼中,我強制執行邏輯以檢查用戶以及每個Web服務調用的UUID。如果他們違反規則,我會根據規則將它們標記在用戶表或設備表中。

還存在一個問題,如果他們一直在卸載應用程序並重新安裝它,並且每次都用另一個用戶名註冊,那麼很難識別。但是,這取決於他們真正想要濫用系統的努力。

在我的應用程序,這是不是一個問題,因爲作爲用戶註冊是不公開的。

希望這會有所幫助。

+0

我有點困惑。蘋果UDID(唯一設備標識符)是所有可能的UUID(通用唯一標識符)的子集。因此,使用「UUID而不是UDID」就像使用「拉丁字母而不是輔音」,或者像「人們而不是女人」那樣說話。 – 2012-07-19 16:16:42

+0

UUID是您的應用程序負責生成並將其用於您的應用程序的內容。 UDID是設備級唯一ID。由於法律問題,您的UDID不會更改,並且蘋果已經阻止程序員訪問它。對於UUID,它基於每個應用程序實例,對於您安裝在設備上的應用程序,無論您對應用程序做什麼,只要您不卸載它,就會擁有相同的UUID。如果你重新安裝應用程序,你會發現自己得到另一個UUID。試試吧,你會明白我的意思。 – 2012-07-19 18:18:16

+0

以後卸載並重新安裝應用程序時發生更改的任何ID對我來說都沒有用處。 – 2012-07-20 05:56:10

相關問題