iOS應用程序間共享數據


我們知道iOS由於沙盒的存在,應用程序不能越過自己的區域去訪問別的存儲空間的內容,不過可能有許多場景我們需要在應用程序之間共享數據,比如多個應用共用用戶名密碼進行登錄等。雖然我們不能直接通過文件系統來分享數據,不過還是有些方法可以實現,為了方便說明,這里同時創建了兩個工程send和receive,實現這兩個app之間的信息共享,send負責寫數據,receive負責讀數據,具體的demo代碼可以到這里獲取

UIPasteboard

剪貼板是應用程序之間傳遞數據的簡單方式,建議不要使用全局的粘貼板,而是自己根據名字創建一個新的粘貼板,防止其它地方全局拷貝的影響。然后把需要共享的內容復制到粘貼板,粘貼板的內容可以是文本、URL、圖片和UIColor等,另一個app就可以根據粘貼板的名字去讀取相關的信息。

send設置粘貼板的內容:
UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"myPasteboard" create:YES];
pasteboard.string = @"myShareData";

receive讀取粘貼板的內容:

UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"myPasteboard" create:NO];

NSString *content = pasteboard.string;

Custom URL Scheme

利用OpenUrl共享數據請看http://www.cnblogs.com/qiaomc/p/5818445.html鏈接

Shared Keychain Access
iOS的keychain提供一種安全保存信息的方式,可以保存密碼等數據,而且keychain中的數據不會因為你刪除app而丟失,你可以在重新安裝后繼續讀取keychain中的數據。通常每個應用程序只允許訪問自己在keychain中保存的數據,不過假如你使用同一個證書的話,不同的app也可以通過keychain來實現應用間的數據共享
為了實現keychain共享數據,我們需要開啟Keychain Sharing,開啟方法如下,然后添加設置相同的Keychain Group,不過別忘記了添加Security.framework。

注意:send和receive兩個項目都需要開啟Keychain Sharing,開啟之后會生成xxxxx.entitlements文件,需要在receive項目里的xxxxx.entitlements文件添加send的bundle ID才能正常共享數據

send

 

receive

 

send保存數據到keychain(為了簡單使用SSKeychian)

[SSKeychain setPassword:@"shareData" forService:@"myservice" account:@"qmc"];

receive讀取數據

NSString *myData = [SSKeychain passwordForService:@"myservice" account:@"qmc"];

 

App Groups

iOS8之后蘋果加入了App Groups功能,應用程序之間可以通過同一個group來共享資源,app group可以通過NSUserDefaults進行小量數據的共享,如果需要共享較大的文件可以通過NSFileCoordinator、NSFilePresenter等方式。
開啟app groups,需要添加一個group name,app之間通過這個group共享數據:

send項目根據group name設置內容:

 NSUserDefaults *myDefaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.cn.goldenshiel.shareData"];
 [myDefaults setObject:@"shared data" forKey:@"mykey"];

 

receive根據group name讀取數據

NSUserDefaults *myDefaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.cn.goldenshiel.shareData"];
NSString *content = [myDefaults objectForKey:@"mykey"];

 

此外,如果數據量比較大,則需要保存到數據庫或文件中,共享數據庫或文件的通過NSFileManager來實現

代碼如下:

NSFileManager *fileMgr = [NSFileManager defaultManager];
    
    NSURL *url = [fileMgr containerURLForSecurityApplicationGroupIdentifier:@"group.cn.neiwang.gview"];


免責聲明!

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



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