app之間使用UIPasteboard讀取數據的坑


背景:

我們公司目前3個App,假設稱之為A、B、C,后台用戶系統是一套,當然,這3個應用的appid都是在我們公司的一個蘋果開發賬號下。

遇到的問題

A和B是上線了好久的應用,並且A登錄了之后會將登錄信息寫在A創建的粘貼板上,B應用可以直接讀取粘貼板中的登錄信息,一鍵登錄。反之亦然。
現在我們新開發了C,也想只要安裝了A或者B,C就可以一鍵登錄。使用之前AB之間的方式如法炮制,結果,到了C里卻不行了。怎么樣都讀取不到A或者B的粘貼板。

問題的原因

研究了很久才發現,原來蘋果開發賬號創建Appid的時候。需要選擇一個prefix

但是其實我們往往到這步,都不會注意該選擇哪個prefix,或者選項里就一個prefix。但是我們這里有3個。。。。。原因可能是和cer開頭的那個開發證書有3個有關系。
而這個prefix的選擇其實是很重要的,因為如果appid生成之后,想再改的話就只能聯系蘋果客服了。
而選擇了相同prefix的appid,才可以相互讀取UIPasteboard,以及keychain。所以A、B兩個app當時都用了同一個prefix,所以相互讀取

解決

找到原因后,如何解決問題呢?
方法1:和蘋果客服聯系,看能否更改prefix。這個還么有嘗試是否可以。
方法2: 將兩個app,都加入相同的appGroups,然后將數據存入userdefault就可以相互讀取了。
但是讀或者寫UserDefault的方式和平時使用都不太一樣

+ (NSString *)widgetStringForKey:(NSString *)defaultName {
    NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.xxx.xxx.xxx"];
    return [shared stringForKey:defaultName];
}

+ (void)widgetSetObject:(id)value forKey:(NSString *)defaultName {
    NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.xxx.xxx.xxx"];
    [shared setObject:value forKey:defaultName];
    [shared synchronize];
}

另外這篇文章總結了兩個app交互數據的方式:

http://freemind-lj.github.io/2016/02/02/iOS應用程序間共享數據/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM