現在有應用A和應用B兩個應用,其中應用B希望可以開啟應用A,傳遞一定的參數給A,實現互動。
第一步:應用A在info中的URL Types 建立一項,填寫對應的identifier和schemes,其中identifier對應應用的Bundle Identifier,schemes是其他應用開啟本應用的網域名稱。如下圖所示:
第二步:在應用B的info中添加LSApplicationQueriesSchemes,在array中填寫應用A的schemes,如下圖所示:
第三步:在應用B中添加開啟應用A的代碼
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"platformA://"]]) { NSLog(@"install--"); [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"platformA://?token=123abct"]]; }else{ NSLog(@"no---"); }
第四步:在應用A的appDelegate中添加監控本應用被調用的delegate方法。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{ NSLog(@"Calling Application Bundle ID: %@", sourceApplication); NSLog(@"URL scheme:%@", [url scheme]); NSLog(@"URL query: %@", [url query]); return YES;}- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{ NSLog(@"url: %@", url); NSLog(@"options :%@", options); return YES;}
其中由於方法1在iOS9以上被廢除,所以需要對實際版本最好適配。
完成以上四步,即可實現應用B開啟應用A、並傳遞參數的功能:
應用A接收到參數後,通過對參數的分析即可實現需要的功能。
以上內容為iOS9.0後,APP之間資料傳遞的用法,但由於URL Schemes的變動,所以必須在主動調用一方APP中維護LSApplicationQueriesSchemes白名單。
iOS9.0後URL schemes變動