不同App之間共享數據


我們知道iOS由於沙盒的存在,應用程序不能越過自己的區域去訪問別的存儲空間的內容,不過可能有許多場景我們需要在應用程序之間共享數據,比如多個應用共用用戶名密碼進行登錄等。雖然我們不能直接通過文件系統來共享數據,不過還是有些方法可以實現。

這里,我們新建兩個工程,T1:負責寫數據,T2:負責讀數據。

 

方法一:UIPasteboard

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

T1設置剪貼板內容:

UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"myPasteboard" create:YES];
pasteboard.string = @"myShareData";

T2讀取剪貼板內容:

UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"myPasteboard" create:NO];
NSString *content = pasteboard.string;

 

方法二:共享鑰匙串

iOS的keychain提供一種安全保存信息的方式,可以保存密碼等數據,而且keychain中的數據不會因為你刪除app而丟失,你可以在重新安裝后繼續讀取keychain中的數據。通常每個應用程序只允許訪問自己在keychain中保存的數據,不過假如你使用同一個證書的話,不同的app也可以通過keychain來實現應用間的數據共享。

為了實現keychain共享數據,我們需要開啟Keychain Sharing,開啟方法如下,然后添加設置相同的Keychain Group,不過別忘記了添加Security.framework。

注:鑰匙串清理的時機:1、重置手機;2、使用代碼手動清理。除了這兩種情況,其他情況都不會被清理。

T1應用保存數據至keyChain,T2應用從keyChain讀取數據:

#import "ViewController.h"
#import <SAMKeychain/SAMKeychain.h>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // T1應用保存數據至keyChain
    [SAMKeychain setPassword:@"qwe" forService:@"sss" account:@"qqq"];
}

@end
#import "ViewController.h"
#import <SAMKeychain/SAMKeychain.h>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // T2應用從keyChain讀取數據
    NSString *s = [SAMKeychain passwordForService:@"sss" account:@"qqq"];
    NSLog(@"%@",s);
}

@end

 

方法三:App Groups

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

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // T1通過AppGroup的名字創建信號設置並設置數據
    NSUserDefaults *myDefaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.yss"];
    [myDefaults setObject:@"shared data" forKey:@"mykey"];
}

@end
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // T2根據AppGroup的名字創建偏號設置並讀取數據
    NSUserDefaults *myDefaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.yss"];
    NSString *content = [myDefaults objectForKey:@"mykey"];
    NSLog(@"%@",content);
}

@end

 

方法四:通過Custom URL Scheme

這個主要是應用跳轉方面的知識,就不在這里做過多講解了。


免責聲明!

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



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