最好添加支援http協議 info plist加
<dict> <key>NSAllowsArbitraryLoads</key> <true/></dict>
注意:
模擬器中也是可以跳轉的,模擬器第一次跳轉APP會彈出一個提示框。
真機不會彈提示框
這裡的 URL identifier選填,URL Schemes必填
URL Schemes建議都小寫,由於之後接收到資料的時候,不區分大寫和小寫, 都是轉為小寫。比如URL Schemes填寫 CESHI 其實和 填寫ceshi 一樣
pedometer應用:
開啟info.plist info選項卡添加一個數組 LSApplicationQueriesSchemes Array 數組一: item 0: ceshi01
在 info選項卡最下方的 URL Types中 identifier 不需要填寫 URL Schemes: pedometer
- (void)performanceAction:(UIButton *)sender {
NSURL *otherAppUrl = [NSURLURLWithString:@"ceshi01://"];
//判斷當前系統是否有安裝第三方app用戶端
if([[UIApplicationsharedApplication]canOpenURL:otherAppUrl]){
[[UIApplicationsharedApplication]openURL:otherAppUrl];
}else{
//開啟一個網頁
NSURL *myUrl = [NSURLURLWithString:@"https://www.baidu.com/"];
[[UIApplicationsharedApplication]openURL:myUrl];
}
}
ceshi01應用:
LSApplicationQueriesSchemes Array
item 0: pedometer
URL Types中 identifier 不需要填寫 URL Schemes: ceshi01 若不填寫對方跳轉不進來
- (IBAction)jumpToOtherAppAction:(UIButton *)sender {
NSURL *otherAppUrl = [NSURL URLWithString:@"pedometer://"]; //規定的格式是 URL Schemes://傳遞的訊息 傳遞的訊息區分大小寫
//這裡的pedometer表示第三方應用的info.plist 的URL Types 有一個 URL Schemes 為 pedometer 並不需要第三方應用的工程名字為pedometer,
也不需要第三方應用的 Bundle Identifier 末尾為pedometer (即:com.XXXXX.pedometer形式),也就是說應用之間跳轉與工程名無關,也與 Bundle Identifier無關
這裡暫且將URL Schemes 裡的 pedometer 稱之為 “跳轉KEY”
// 判斷當前系統是否有安裝第三方app用戶端
if([[UIApplication sharedApplication] canOpenURL:otherAppUrl]){
[[UIApplication sharedApplication] openURL:otherAppUrl];
}else{
//開啟一個網頁
NSURL *myUrl = [NSURL URLWithString:@"https://www.baidu.com/"];
[[UIApplication sharedApplication] openURL:myUrl];
}
}
經過以上設定兩個app就可以互相跳轉了
經過本人的反覆測試:(雙向跳轉就是雙方應用均滿足以下的單向跳轉)
單向跳轉的流程猜測**********************************************************:
比如應用ceshi02跳轉到應用pedometer
第一步:跳轉代碼:
- (IBAction)jumpAction:(UIButton *)sender {
NSURL *otherAppUrl = [NSURLURLWithString:@"jumpkey://"];
// 判斷當前系統是否有安裝第三方app用戶端
if([[UIApplicationsharedApplication]canOpenURL:otherAppUrl]){
[[UIApplicationsharedApplication]openURL:otherAppUrl];
}else{
//開啟一個網頁
NSURL *myUrl = [NSURLURLWithString:@"https://www.baidu.com/"];
[[UIApplicationsharedApplication]openURL:myUrl];
}
}
第二步:自己應用中:查詢[NSURL URLWithString:@"jumpkey://"]; 中的jumpkey 在LSApplicationQueriesSchemes中是否查詢的到 否則會報錯
-canOpenURL: failed for URL: "pedometer://" - error: "This app is not allowed to query for scheme pedometer"
第三步:第三方應用pedometer中URL Schemes 有 jumpkey 若有就跳轉
否則會報錯 -canOpenURL: failed for URL: "pedometer://" - error: "(null)"
這三步缺一不可
注意:若ceshi02滿足以上跳轉後,當想從應用pedometer跳回ceshi02時 也必須滿足以上跳轉的三個步驟,只不過身份對調了
若不滿足跳轉的三個步驟 那麼不能跳回 應用ceshi02 但是不影響系統自動產生的 左上方的 返回“ceshi02” 按鈕 返回自身ceshi02的應用
下面研究應用之間傳值:首先跳轉得滿足以上三個步驟 這裡不再贅述
應用pedometer 給 應用ceshi 傳值
1.應用pedometer 中:
- (void)serviceAction:(UIButton *)sender {
NSURL *otherAppUrl = [NSURLURLWithString:@"ceshi://hello"]; //hello 為訊息
// 判斷當前系統是否有安裝第三方app用戶端
if([[UIApplicationsharedApplication]canOpenURL:otherAppUrl]){
[[UIApplicationsharedApplication]openURL:otherAppUrl];
}else{
//開啟一個網頁
NSURL *myUrl = [NSURLURLWithString:@"https://www.baidu.com/"];
[[UIApplicationsharedApplication]openURL:myUrl];
}
}
2. 應用ceshi 中
AppDelegate中
message 列印為 hello
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
NSString* message = [[urlhost]stringByRemovingPercentEncoding];
NSLog(@"%@",message);
returnYES;
}