1、簡介微信
最實際項目開發中,咱們不免會遇到須要從一個應用跳轉到另外一個應用的狀況。好比微信分享,實際就是一種應用間的跳轉。可是有時候咱們須要實現本身的兩個應用間的跳轉,以即可以推廣咱們其餘的應用。這個時候咱們須要使用UIApplication的openURL:的方法app
2、配置ide
1⃣️註冊自定義的URL測試
首先被啓動的應用須要向iPhone註冊一個自定義URL協議。這是在你的項目文件夾的info.plist文件進行的url
1. 右鍵,選擇「Add Row」, Key值選擇「URL types」
2. 打開「Item 0″,而後爲該key增長一個URL identifier。能夠是任何值,但建議用「反域名」(例如 「com.open.url」)。
3. 在「Item 0」下再加一行。
4. 選擇「URL Schemes」 做爲Key。
5. 輸入你的URL協議名 (例如「openurl1://」 應寫作「openurl」)。若是有必要,你能夠在這裏加入多個協議。spa
圖解:code
2⃣️代碼部分(在另外的程序中)orm
- (void)viewDidLoad { [super viewDidLoad]; UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.frame = CGRectMake(100, 100, 120, 50); [btn setTitle:@"測試123" forState:UIControlStateNormal]; [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; btn.titleLabel.font = [UIFont systemFontOfSize:14.0]; [btn setBackgroundColor:[UIColor redColor]];; [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn]; } - (void)btnClick { NSURL * myURL_APP_A = [NSURL URLWithString:@"openurl1://"]; if ([[UIApplication sharedApplication] canOpenURL:myURL_APP_A]) { NSLog(@"canOpenURL"); [[UIApplication sharedApplication] openURL:myURL_APP_A]; } }
3、判斷應用的啓動方式對象
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
經過AppDelegate裏面的回調方法,能夠肯定應用的啓動方式。launchOptions包含了咱們須要的參數blog
說明:當應用程序啓動時執行,應用程序啓動入口。只在應用程序啓動時執行一次。application參數用來獲取應用程序的狀態、變量等,值得注意的是字典參數:(NSDictionary *)launchOptions,該參數存儲程序啓動的緣由。
1.若用戶直接啓動,lauchOptions內無數據;
2.若由其餘應用程序經過openURL:啓動,則UIApplicationLaunchOptionsURLKey對應的對象爲啓動URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey對應啓動的源應用程序的bundle ID (NSString);
3.若由本地通知啓動,則UIApplicationLaunchOptionsLocalNotificationKey對應的是爲啓動應用程序的的本地通知對象(UILocalNotification);
4.若由遠程通知啓動,則UIApplicationLaunchOptionsRemoteNotificationKey對應的是啓動應用程序的的遠程通知信息userInfo(NSDictionary);
其餘key還有UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey,
UIApplicationLaunchOptionsNewsstandDownloadsKey。 若是要在啓動時,作出一些區分,那就須要在下面的代碼作處理。 好比:應用能夠被某個其它應用調起(做爲該應用的子應用),要實現單點登陸,那就須要在啓動代碼的地方作出合理的驗證,並跳過登陸
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSLog(@"%@", launchOptions); NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey]; if(url){} NSString *bundleId = [launchOptions objectForKey:UIApplicationLaunchOptionsSourceApplicationKey]; if(bundleId){} UILocalNotification * localNotify = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; if(localNotify){} NSDictionary * userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; if(userInfo){} return YES; }