1. 應用場景
1) 使用第三方用戶登錄竭鞍,需要用戶授權(quán)滨砍,還需要"返回到調(diào)用的程序绒窑,同時返回授權(quán)的用戶名"
2) 應用程序推廣钦铺,網(wǎng)易彩票沼本,設置-推薦應用-有很多應用程序圖標
-如果本機已經(jīng)安裝過辫红,會直接跳轉(zhuǎn)到另外一個應用程序
-軟件的廣告揍瑟,推廣結(jié)果底循,后續(xù)會有一些列的金錢上的結(jié)算
- 支付寶,第三方支付,淘寶,電話費充值。。蜻展。
2. 要打開本機上的其他應用程序敷矫,需要設置schemes怎茫,自定義的協(xié)議頭虫埂,可以打開其他的應用程序
你也許會遇到一下問題:
1、 canOpenURL 方法不執(zhí)行?
2、“This app is not allowed to query for scheme xxx”
3新博、“This app is not allowed to query for scheme xxx”
.官網(wǎng)的解釋:(就是在info.plist 文件里添加 LSApplicationQueriesSchemes)
If you call the “canOpenURL” method on a URL that is not in your whitelist, it will return “NO”, even if there is an app installed that has registered to handle this scheme. A “This app is not allowed to query for scheme xxx” syslog entry will appear.
If you call the “openURL” method on a URL that is not in your whitelist, it will fail silently. A “This app is not allowed to query for scheme xxx” syslog entry will appear.
在info.plist文件里,添加
<key>LSApplicationQueriesSchemes</key>
<array>
<string>urlscheme1</string>
<string>urlscheme2</string>
<string>urlscheme3</string>
<string>urlscheme4</string>
</array>
跳轉(zhuǎn)的代碼如下:
- (IBAction)openWangyi:(id)sender
{
// 跳轉(zhuǎn)到其他應用程序
// schemes: 網(wǎng)易的scheme wangyi
NSURL *url = [NSURL URLWithString:@"wangyi://view?newsid=201410130001"];
// 判斷本機是否安裝了目標程序
if ([[UIApplication sharedApplication] canOpenURL:url]) {
// [[UIApplication sharedApplication] openURL:url];// 過時方法,沒效果
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
NSLog(@"沒有安裝,可以再給定下載地址,前往");
}
}
判斷設備是否安裝了某個app胡本,在info.plist 文件添加:例如 app的名字:testA
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>testA</string>
</array>
</dict>
</array>
IOS 推薦使用咒锻,一下方法打開app
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
3. 新浪微博的授權(quán)界面說明:
1> 在新浪微博中思灌,本身不能直接跳轉(zhuǎn)到該界面
2> 用其他應用程序打開時,如果scheme時weibo://oaauth,直接進入此界面
3> 如果直接點擊搬俊,返回腹缩,返回調(diào)用放應用程序
4> 如果點擊表格行中的用戶名盘寡,直接返回用戶信息給調(diào)用應用程序
4. 如果要返回調(diào)用的應用程序变隔,需要知道調(diào)用我們的應用程序的scheme
/** 只要是由其他應用程序打開的,就會調(diào)用此方法 /
/* URL 就是其他應用程序,打開當前程序使用的URL */
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
openURL 是打開當前應用程序的url
sourceApplication 是當開當前應用程序的源程序的BundleId
提示:一旦重寫了新方法进胯,舊方法就不再被執(zhí)行
但是:很多第三方框架,都建議兩個方法全都寫
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
5竭宰、如何傳參數(shù)廓旬?
1旁赊、其實它的傳參數(shù),是在 @":// " , 后面的。它的作用是嗽上,根據(jù)參數(shù)做想要的做的邏輯逐沙。
2忆嗜、點擊跳轉(zhuǎn)時途样,首先會調(diào)用該方法条辟,所以,最先在該方法里做邏輯判斷鹰祸。
3、你可以根據(jù) 下面的方法去獲取:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
注意一下:是舊設備的話,需要使用舊的方法,否則會閃退澜沟,不知道是Xcode 8的原因還是班缰,設備的原因,模擬器是不會閃退莹妒。 推薦開發(fā)時使用新舊方法,這樣就可以滿足不同的設備了。