在iOS的Application中。每一個(gè)應(yīng)用都存在于一個(gè)沙盒路徑中贮聂,應(yīng)用和應(yīng)用之間是不能進(jìn)行數(shù)據(jù)訪問(wèn)的靠柑。
但是在某些情況下,需要進(jìn)行app間的數(shù)據(jù)傳遞吓懈。另一種情況下是歼冰,需要用appA打開appB,最熟悉的情況莫過(guò)于打開支付寶耻警。
有趣的是隔嫡,蘋果提供了供我們進(jìn)行app間調(diào)用的方法——Url Scheme.
- 交互場(chǎng)景
appA點(diǎn)擊某個(gè)按鈕甸怕,打開appB
-
步驟
- appB需要在對(duì)應(yīng)的plist中設(shè)置URL types,其中包括四個(gè)要素腮恩。
identifier : identifier:表示這個(gè)UrlType的唯一表示梢杭,一般都是用域名反轉(zhuǎn)的方式,如com.riyunyuan.vplus.test秸滴,
Url Schemes :
Url Schemes
武契,對(duì)應(yīng)的是一個(gè)數(shù)組,可以添加很多子項(xiàng)荡含,只需要一個(gè)字符串就可以咒唆,例如填寫vplustest
屏幕快照 2016-11-16 19.18.24.png- 利用Url Scheme
Safari : 在Safari地址欄中輸入
vplustest://
就可以打開應(yīng)用使用appA :
- (IBAction)openOtherBtn:(id)sender { NSString *vhealthUrlType = @"vplustest://query=25&name=125"; UIApplication *app = [UIApplication sharedApplication]; if ([app canOpenURL:[NSURL URLWithString:vhealthUrlType]]) { [app openURL:[NSURL URLWithString:vhealthUrlType] options:@{@"param1" : @"10000"} completionHandler:^(BOOL success) { NSLog(@"打開vhealth成功"); }]; } }
這里通常會(huì)報(bào)一個(gè)錯(cuò)誤,
This app is not allowed to query for scheme **
释液,這里是需要在appA中的plist中使用LSApplicationQueriesSchemes
全释,在對(duì)應(yīng)的item中為vplustest
屏幕快照 2016-11-16 19.48.14.png就可以打開了
傳參
了解三個(gè)函數(shù),需要appB中實(shí)現(xiàn)误债,用于接收從appA傳遞過(guò)來(lái)的參數(shù)
// iOS2.0 ~ iOS9.0
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url// iOS4.x ~ iOS9.0
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
// iOS9.0 之后
- (BOOL)application:(UIApplication *)app openURL:(NSURL )url options:(NSDictionary<NSString, id> *)options NS_AVAILABLE_IOS(9_0)三個(gè)函數(shù)作用相同浸船,都是用于其他app調(diào)用,返回YES就表示可以被調(diào)用
> 參數(shù)攜帶方式`vplustest://?query=25&name=125`
- 在appB中可以直接拿到url = vplustest://?query=25&name=125寝蹈,
- 可以使用
[url query]
得到query=25&name=125
李命。 - BundleId: 在最新的iOS9.0之后的api中可以獲取options對(duì)應(yīng)key為
UIApplicationOpenURLOptionsSourceApplicationKey
獲取到appA的BundleId - BundleId: 之前的api,可以使用
sourceApplication
參數(shù)獲取
獲取到參數(shù)箫老,就可以做具體的操作了
reference:
iOS中的URL Scheme
Querying URL Schemes with canOpenURL