目标:
1、从URL启动自己或别人的App
2、传递数据
说明:
这是一个非常常用的功能,在一些第3方SDK中也常用集成如跳转到朋友圈分享微信支付,以及调回来之后的处理等。我们看下怎么实现:
实现:
1、scheme 通过工程(target)设置->info->url type中设置,URL Schemes 中设置的名字 例如:HulaVenue 则在safari中可以使用 HulaVenue://的方式进行启动
app中也可以使用 [[UIApplication sharedApplication] openURL:@”HulaVenue://”];方式进行启动该app
一个app支持设置多个URL Schemes。
2、获得参数iOS在appdelegate中提供了一组方法
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url NS_DEPRECATED_IOS(2_0, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED; - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation NS_DEPRECATED_IOS(4_2, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED; - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options NS_AVAILABLE_IOS(9_0); // no equiv. notification. return NO if the application can't open for some reason
以上三个代理功能基本一致 分别是在ios2 ios4 ios9中实现的,其优先级为3 > 2 >1 如果实现了优先级较高的代理 则另外的将不在调用。 注意: ios9以上的系统只会回调3。 ios8及以下的系统不会调用3。
3、canOpen
NSURL *url = [NSURL URLWithString:@"weixin://"]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; }
iOS9加强了权限管理,只有在info.plist文件中加入了URL Schemes白名单才能使用canOpenURL方法来判断是否能打开该url (openURL方法没有此项限制)。该白名单的上限是50个。
添加方式如下:
<key>LSApplicationQueriesSchemes</key> <array> <string>weixin</string> </array>