App之間的數據共享——App Group的配置


在實際的開發中,我們也許會有這種需求:
公司的旗下有兩個App,當客戶已經登錄一個App A的情況下,再登錄另一個App B時,B不再需要繁瑣的登錄過程就可以直接使用A已經登錄的信息。但是iOS系統下有這么一個安全機制:每個應用都有自己對應的沙盒,每個沙盒之間都是相互獨立的,互不能訪問(沒有越獄的情況下)。
這種情況,我們應該怎么處理呢?

一、認識App Groups

AppGroup allows data sharing between two different apps or even app and widgets by creating one common shared path (like document directory). Data saved over there can be accessed by any app which is associated with that particular AppGroup. It is an offline data sharing between apps.
這是一段關於App groups的一段說明,告訴我們了App Groups可以使兩個不同的APP進行數據共享,看起來這個是解決我們剛才那個問題的好方法。那就讓我們開啟我們的數據共享之旅吧!

二、創建APP

  • 創建兩個app,分別命名為MainApp, SubApp(為了寫文章,我重新新建了兩個app,只怪自己寫Demo命名太亂來 )。
  • 在Apple Developer中配置兩個app的App ID:

     

     

     


     
     
 
App ID Screens

當我們創建app id的時候不要忘記把App Services選項中的App Groups給勾上哦,這樣才能夠保證我們接下來可以使用App Groups。
當我們配置完成App ID之后,會發現App Groups是Configurable狀態,這是因為咱們還沒有配置相應的app groups,別着急,咱們等會再來管它。

 

 

 

 


 
App ID配置完成
  • 在Apple Developer中配置兩個app的Profile(這里我只配置了dev的profile):
    一次從簡,我這不再贅述profile的配置了,只貼上兩張圖表示一下。。。
 
 

 

 

 

 
 

三、創建App Groups

接下來就到了我們的重頭戲:App Groups

  • 還是要打開Apple Developer,在id那一組中又一個App Groups選項,打開就是如下的畫面(多么慶幸這一個賬號從沒設置過任何的組):

 

 

 
App Groups初始狀態
  • 然后我們Continue:

     

     

     

    配置App Groups

    納尼!!就這兩個選項???
    沒錯,就這兩個選項,第一個是我們這個app group的描述,第二個是我們app group的id。這個id默認是要group.打頭,並且是不能去掉的

     

  • 還記得咱們剛才App ID的一個Configurable狀態嗎?咱們現在就去收拾它去~~

 

 

 

 

 

 

 
 
 
 
 
 
 

點擊Edit---勾選上剛創建好的App Group----配置完成,在返回來看一下咱們的App ID,完美~Enabled狀態了。

四、在程序中配置App Group

  • 分別打開兩個程序,切換到Capabilities選項卡,找到App Groups選項,刷新一下,將App developer中的App Groups同步下來,然后勾選上咱們剛才創建的開發組。
 

 

 

Xcode中配置App Groups

當我們配置完以后,會在文件目錄下多出來一個.entitlements的文件。

 

 

 

工程目錄

五、用代碼,創建共享文件

配置工作做完了,接下來,就是我們的代碼表現的時間了。
在這里,我只創建了一個.txt來存儲數據,其他類型的持久化存儲同理
廢話不多說,貼代碼:

  • 首先是Main App寫入數據
//Main App 通過TextField來向共享文件appGroup.txt中寫入數據 - (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]; } 
  • 接下來是Sub App讀數據
//Sub App 通過獲取appGroup.txt中的數據,展現在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當當當,沒錯,就是這個方法,用來在share path中創建share document。
ps: 拋給大家個問題,感興趣的同學可以試着找一下分享目錄在哪,對於喜歡搞機的朋友來說這個問題so easy

現在運行一下,來看一下效果:
Main App輸入數據

 

 

 
Main App

Sub App輸出數據

 

 

 

 
Sub App

可能細心的小伙伴看見了jump to sub和jump to main,這兩個button是利用了URL Types進行的簡單的app跳轉,有興趣的童鞋可以自己嘗試一下。

六、結語

到現在為止,最簡單的兩個app之間的數據共享已經說完了,但是這離項目的實際應用還是有段距離的,建議大家可以根據業務自己封裝一個數據共享類來方便自己正在項目中的使用~~~



作者:陌上小孩
鏈接:https://www.jianshu.com/p/94d4106b9298
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

 


免責聲明!

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



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