1. 應(yīng)用場景
有時候,會遇到這樣的需求:需要我們從應(yīng)用跳轉(zhuǎn)到系統(tǒng)的設(shè)置選項或者另外一個應(yīng)用。
2.應(yīng)用間相互跳轉(zhuǎn)實現(xiàn)原理
在iOS中打開一個應(yīng)用程序只需要拿到這個應(yīng)用程序的協(xié)議頭即可,所以我們只需配置應(yīng)用程序的協(xié)議頭即可。
假設(shè)有應(yīng)用A和應(yīng)用B兩個應(yīng)用,現(xiàn)在需要從應(yīng)用B跳轉(zhuǎn)到應(yīng)用A中。
原理:通過設(shè)置跳轉(zhuǎn)到應(yīng)用A的URL Schemes(自定義的協(xié)議頭),應(yīng)用A將其自身“綁定”到一個自定義URL Schemes上,就可以從應(yīng)用B中利用應(yīng)用A的URL Schemes啟動應(yīng)用A了。
具體怎么做呢,下面一步步來教你,先來個簡單點的:從應(yīng)用B跳轉(zhuǎn)到應(yīng)用A
3.實例
4. 步驟
4.1
首先我們用Xcode創(chuàng)建兩個iOS應(yīng)用程序項目,項目名稱分別為App-A、App-B。4.2 目標: 要別人跳轉(zhuǎn)到App-A中,所以得設(shè)置APP-A的URL Schemes
選擇項目App-A -> TARGETS -> Info -> URL Types -> URL Schemes,設(shè)置App-A的URL Schemes為testa。
- 4.3
那么在B中只要
// 1.獲取應(yīng)用程序App-B的URL Scheme
NSURL *appBUrl = [NSURL URLWithString:@"testa://"];
// 2.判斷手機中是否安裝了對應(yīng)程序
if ([[UIApplication sharedApplication] canOpenURL:appBUrl]) {
// 3. 打開應(yīng)用程序App-A
[[UIApplication sharedApplication] openURL:appBUrl];
} else {
NSLog(@"沒有安裝");
}
iOS9.0之前只要直接打開就行,iOS9.0之后如果打開其他應(yīng)用的,得把其他應(yīng)用的協(xié)議頭URL Scheme加到白名單中,也就是在info.plist 加個字段LSApplicationQueriesSchemes 是Array類型,把要跳轉(zhuǎn)的協(xié)議頭testa加到里面
這樣就可以應(yīng)用B就可以跳轉(zhuǎn)應(yīng)用A中了
5.進階
應(yīng)用B和應(yīng)用A怎么實現(xiàn)數(shù)據(jù)的通信或者說應(yīng)用B怎么能進入到應(yīng)用A的不同應(yīng)用面
可以從A應(yīng)用的應(yīng)用代理AppDelegate.m文件會走代理方法,可以根據(jù)跳轉(zhuǎn)來的URL 來判斷
在B中打開的URL 為:testa://test.a/paremet/#id=10000
// 1.獲取應(yīng)用程序App-B的URL Scheme
NSURL *appBUrl = [NSURL URLWithString:@"testa://test.a/paremet/#id=10000"];
// 2.判斷手機中是否安裝了對應(yīng)程序
if ([[UIApplication sharedApplication] canOpenURL:appBUrl]) {
// 3. 打開應(yīng)用程序App-B
[[UIApplication sharedApplication] openURL:appBUrl];
} else {
NSLog(@"沒有安裝");
}
在A中能得到的URL:testa://test.a/paremet/#id=10000 ,這樣就能事項應(yīng)用之間的通信了
/**
從其他App跳轉(zhuǎn)過來, iOS 9.0 以后走這個方法, 只要定義好url的參數(shù)給別人知道,就可別人設(shè)置參數(shù)來跳轉(zhuǎn)不同界面
*/
- (BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
// 可以從跳來url 地址來跳不同的頁面
NSLog(@"%@", url);
return YES;
}
/**
從其他App跳轉(zhuǎn)過來, iOS 9.0 之前走這個方法, 只要定義好url的參數(shù)給別人知道,就可別人設(shè)置參數(shù)來跳轉(zhuǎn)不同界面
*/
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
// 可以從跳來url 地址來跳不同的頁面
NSLog(@"%@", url);
return YES;
}
6.怎么尋找其他應(yīng)用的URL Schemes
要跳轉(zhuǎn)到別人的應(yīng)用的首先得知道別人的應(yīng)用URL Schemes
先 裝個PP助手
例如找餓了么URL Schemes
把ipa 包改成zip包解壓,找到里面的info.plist 表就可以看到該應(yīng)用的URL Schemes
如果覺得我的文章對您有用,請點擊喜歡,贊賞就不用了,您的支持將鼓勵我繼續(xù)創(chuàng)作!