iOS 从URL启动App与openURL

目标:

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>

iOS开发 UniversalLinks支持通用链接。

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>