iOS APP之間數(shù)據(jù)共享與UUID

最近的一個(gè)項(xiàng)目,遇到了應(yīng)用之間數(shù)據(jù)共享和設(shè)備唯一標(biāo)識(shí)的問題。經(jīng)過多方面的搜索、驗(yàn)證,得到了一些結(jié)論?,F(xiàn)在總結(jié)如下:

一、應(yīng)用之間共享數(shù)據(jù)

1、URL Scheme

在Info.plist中配置URL Types,通過自定義的協(xié)議,來(lái)傳遞數(shù)據(jù)。特性是APP之間通過協(xié)議傳遞數(shù)據(jù),會(huì)有一個(gè)跳轉(zhuǎn)過程。示例支付寶、微信支付等。

2、UIActivityViewController

iOS 6.0以后,蘋果推出的分享視圖控制器。特性是彈出系統(tǒng)分享控制器,一般用于分享。

3、Shared Keychain

使用Keychain共享數(shù)據(jù),需要開啟Keychain Sharing服務(wù),并限于同一供應(yīng)商(即同一個(gè)蘋果證書)下的應(yīng)用之間共享數(shù)據(jù)。

4、App Groups

iOS 8.0以后,蘋果推出了App Groups,使用NSUserDefaults、NSFileManager、NSFileCoordination共享數(shù)據(jù),限于同一Group下的應(yīng)用。

5、UIPasteboard

剪貼板,是應(yīng)用之間共享文本的一種方式。示例在一個(gè)APP中,復(fù)制一段文本,在另一個(gè)APP中粘貼使用。能跨應(yīng)用分享數(shù)據(jù)了,但是限于數(shù)據(jù)類型、數(shù)據(jù)量大小,升級(jí)系統(tǒng)數(shù)據(jù)丟失。


二、設(shè)備唯一標(biāo)識(shí)

1、UDID

唉,這個(gè)iOS 5.0以后被蘋果禁用了。

2、UUID

UDID被禁用以后,蘋果推出的替代品。但是這個(gè)值,同一應(yīng)用、不同時(shí)間調(diào)用時(shí),生成的值不一樣;不同應(yīng)用,生成的值也不一樣。唯一的優(yōu)點(diǎn),每次生成的都是唯一值。

3、MAC

唉,這個(gè)iOS 7.0以后也被封殺了。

4、IDFA

全名advertisingIdentifier。適用于iOS 6.0以后,在同一臺(tái)設(shè)備上,所有App都會(huì)取到相同的值,是蘋果專門給各廣告提供商用來(lái)追蹤用戶而設(shè)的,用戶可以在 設(shè)置|隱私|廣告追蹤 里重置此id的值,或限制此id的使用,故此id有可能會(huì)取不到值,而且提交蘋果審核時(shí),必須明確指出使用了該值。

5、IDFV

全名identifierForVendor。使用于iOS 6.0以后,在同一設(shè)備上,同一供應(yīng)商的APP取到相同的值,如果該供應(yīng)商下的所有APP都被刪除,該值會(huì)被重置。

6、OPEN

網(wǎng)上有很多OPENUDID、OPENIDFA。實(shí)現(xiàn)方式為獲取手機(jī)的型號(hào)、系統(tǒng)創(chuàng)建時(shí)間、系統(tǒng)磁盤大小等一些系統(tǒng)屬性組合在一起,使用MD5模擬生成的類似UDID和IDFA的一串字符串。喲,這個(gè)貌似不錯(cuò),可以不同的應(yīng)用直接能獲得同一值。但是,如果同一型號(hào)、同一批次出產(chǎn)的手機(jī),那這個(gè)值不就一個(gè)樣了??!


好了,上面介紹了iOS 應(yīng)用共享、設(shè)備唯一符?,F(xiàn)在有一需求:實(shí)現(xiàn)不同應(yīng)用之間(跨供應(yīng)商,即不同開發(fā)者賬號(hào))共享登錄賬號(hào)密碼,并能對(duì)用戶是否更換設(shè)備進(jìn)行跟蹤。這個(gè)該怎么實(shí)現(xiàn)?。。?!

輾轉(zhuǎn)反側(cè),夜夜不能寐。想到以下條件:

1、使用UUID生成設(shè)備唯一標(biāo)識(shí)(這個(gè)應(yīng)該不會(huì)被蘋果禁用);

2、使用NSUserDefaults存儲(chǔ)UUID(我們不能每次都去獲取UUID啊,不然那還有啥意思);

3、使用UIPasteboard實(shí)現(xiàn)跨應(yīng)用共享文本數(shù)據(jù)(這個(gè)也應(yīng)該不會(huì)被蘋果禁用);

4、使用OPEN中提到的手機(jī)的型號(hào)、系統(tǒng)創(chuàng)建時(shí)間、系統(tǒng)磁盤大小等(這個(gè)也應(yīng)該不會(huì)被蘋果禁用);

上面是條件,下面是方法

1、第一次使用,先從UIPasteboard讀取,有值,則讀??;沒值,則從NSUserDefault中讀取。NSUserDefault中有值則讀取,并保存到UIPasteboard中;沒值,則使用UUID生成唯一值。

2、使用UUID生成唯一值后,保存到NSUserDefault中,保存到UIPasteboard中。

3、第二次使用,如果是跨應(yīng)用讀取,也就是說,第一次我是在A應(yīng)用中生成的,現(xiàn)在我在B應(yīng)用中讀取。這種情況,如果讀取有值,那么要把讀取的值,保存到B應(yīng)用的NSUserDefault中。

上面3步貌似能解決大部分情況的問題了。可是還有個(gè)問題,比如我恢復(fù)出廠設(shè)置咋辦啊?。?!

我唯一能給出的答案,用我們強(qiáng)大的網(wǎng)絡(luò)!

把保存的UUID值,條件中的第4步中的手機(jī)型號(hào)、系統(tǒng)創(chuàng)建時(shí)間、系統(tǒng)磁盤大小等,都在網(wǎng)絡(luò)上保存一份。每次獲取時(shí),從網(wǎng)絡(luò)獲取UUID,手機(jī)型號(hào)等、并與本地比較。因?yàn)橐话阌脩舾鼡Q設(shè)備后,設(shè)備型號(hào)都會(huì)有所更新,你不要告訴我你升級(jí)設(shè)備后,用的還是同一型號(hào)同一款!

貌似解決了???!


就上面這些了,我只提供一些思路。目前在我的項(xiàng)目中,也是這樣使用的,目前還好,沒啥大問題。

歡迎大家提出一些問題,共同探討、進(jìn)步!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容