- 實(shí)際開發(fā)中,我們也許會(huì)有這種需求:公司有兩個(gè)APP,當(dāng)用戶登錄其中一個(gè)APP后,在下載第二個(gè)APP的時(shí)候,可以實(shí)現(xiàn)自動(dòng)登錄的功能。
- 這種情況如何實(shí)現(xiàn)呢?我之前的項(xiàng)目一直都是用第三方類庫
KeychainAccess實(shí)現(xiàn)的鑰匙串分享數(shù)據(jù)的模式Keychain share。但是幾天前查資料,開始認(rèn)識(shí)另外一種方式,不依賴第三方庫就可以實(shí)現(xiàn),那就是APP Groups。iOS8新開放的功能
配置APP Groups
創(chuàng)建兩個(gè)APP,并且在Apple Developer中創(chuàng)建兩個(gè)APP的id
創(chuàng)建APPid時(shí),在APP Groups復(fù)選框打上對鉤,當(dāng)我們配置完成App ID之后,會(huì)發(fā)現(xiàn)App Groups是Configurable狀態(tài),這是因?yàn)樵蹅冞€沒有配置相應(yīng)的app groups,別著急,咱們等會(huì)再來管它。-
還是要打開Apple Developer,在id那一組中又一個(gè)App Groups選項(xiàng),我們新創(chuàng)建一個(gè)APP Groups,
111.png這里一共有兩個(gè)選項(xiàng),第一個(gè)是我們這個(gè)app group的描述,第二個(gè)是我們app group的id。這個(gè)id默認(rèn)是要group.打頭,并且是不能去掉的。
-
現(xiàn)在去配置新創(chuàng)建的兩個(gè)APP ID,因?yàn)樵賱?chuàng)建的時(shí)候勾選了APP Groups,但是并沒有配置它,所以它回事黃色的狀態(tài),現(xiàn)在點(diǎn)擊Edit,進(jìn)入之后選擇新創(chuàng)舉的groups。
111.png 點(diǎn)擊Edit---勾選上剛創(chuàng)建好的App Group----配置完成,在返回來看一下咱們的App ID,完美~Enabled狀態(tài)了。
配置Xcode中的APP Groups
-
分別打開兩個(gè)程序,切換到Capabilities選項(xiàng)卡,找到App Groups選項(xiàng),刷新一下,將App developer中的App Groups同步下來,然后勾選上咱們剛才創(chuàng)建的開發(fā)組。
111.png 當(dāng)我們配置完以后,會(huì)在文件目錄下多出來一個(gè).entitlements的文件。
如何實(shí)現(xiàn)數(shù)據(jù)共享
配置工作做完了,接下來,就是我們的代碼表現(xiàn)的時(shí)間了。
在這里,我只創(chuàng)建了一個(gè).txt來存儲(chǔ)數(shù)據(jù),其他類型的持久化存儲(chǔ)同理
- 首先是Main App寫入數(shù)據(jù)
//Main App 通過TextField來向共享文件appGroup.txt中寫入數(shù)據(jù)
- (void)textFieldDidEndEditing:(UITextField *)textField {
//獲取App Group的共享目錄
NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.simon.app.test"];
NSURL *fileURL = [groupURL URLByAppendingPathComponent:@"appGroup.txt"];
//寫入文件
[textField.text writeToURL:fileURL atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
- 接下來是兩一個(gè)APP讀取數(shù)據(jù)
//Sub App 通過獲取appGroup.txt中的數(shù)據(jù),展現(xiàn)在label上
//獲取App Group的共享目錄
NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.simon.app.test"];
NSURL *fileURL = [groupURL URLByAppendingPathComponent:@"appGroup.txt"];
//讀取文件
NSString *str = [NSString stringWithContentsOfURL:fileURL encoding:NSUTF8StringEncoding error:nil];
self.shareLabel.text = str;
containerURLForSecurityApplicationGroupIdentifier,沒錯(cuò),就是這個(gè)方法,用來在share path中創(chuàng)建share document。NSUserDefaults使用
//初始化一個(gè)供App Groups使用的NSUserDefaults對象
NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.company.appGroupName"];
//寫入數(shù)據(jù)
[userDefaults setValue:@"value" forKey:@"key"];
//讀取數(shù)據(jù)
NSLog(@"%@", [userDefaults valueForKey:@"key"]);


