ios在工程中打开其他的应用

在safari打开WXApp

注册了URL Schemes的应用,用safari浏览器也是可以打开的。我就经常用这个来验证应用是否设置了我想要的URL Schemes
在safari打开WXApp,直接在safari的地址栏输入weixin://,enter就可以打开了

版本大于等于iOS9的适配问题

- (IBAction)buttonAction:(UIButton *)sender {
    if ([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"weixin://"]]) {
        
        [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"weixin://"] options:@{} completionHandler:^(BOOL success) {
            
        }];
    }else{
        NSLog(@"没有安装微信");
    }
}

如果没有安装微信,但是控制台会报错,


控制台信息

这是因为ios9以后,苹果对权限进行了加强,必须把urlschemes加入plist的白名单中,

备注:这个受影响的只是canOpenURL,openURL并不影响

我们需要在MyApp的info.plist里面将weixin设置为白名单。
步骤:点击info.plist->右键->Open As->Source Code->添加下面的代码

<key>LSApplicationQueriesSchemes</key>
    <array>
        <string>weixin</string>
    </array>

使用URL Schems传递数据

URL Schemes除了可以用来打开APP之外,还可以用来在两个App之间传递少量的数据。
而且,在openURL的时候,如果url中带有参数,只要URL Schemes是正确的,那同样可以打开App,而且,后面的参数也会带到我们打开的App那里。
咱们做个Demo就一目了然了。
在MyApp中,url为weixin://www.jianshu.com/u/a8ee38cc2571?title=title&content=helloWorld

- (IBAction)buttonAction:(UIButton *)sender {
    if ([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"weixin://www.jianshu.com/u/a8ee38cc2571?title=title&content=helloWorld"]]) {
        
        [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"weixin://www.jianshu.com/u/a8ee38cc2571?title=title&content=helloWorld"] options:@{} completionHandler:^(BOOL success) {
            
        }];
    }else{
        NSLog(@"没有安装微信");
    }
}

然后可以在另外一个app中就可以检测到时通过urlSchems打开的

- (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
// Keys for application:openURL:options:
UIKIT_EXTERN NSString *const UIApplicationOpenURLOptionsSourceApplicationKey NS_AVAILABLE_IOS(9_0);   // value is an NSString containing the bundle ID of the originating application
UIKIT_EXTERN NSString *const UIApplicationOpenURLOptionsAnnotationKey NS_AVAILABLE_IOS(9_0);   // value is a property-list typed object corresponding to what the originating application passed in UIDocumentInteractionController's annotation property
UIKIT_EXTERN NSString *const UIApplicationOpenURLOptionsOpenInPlaceKey NS_AVAILABLE_IOS(9_0);   // value is a bool NSNumber, set to YES if the file needs to be copied before use
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 目标 平常我们做iOS开发,会经常遇到打开其他的APP的功能。本篇文章讲的就是打开别人的APP的一些知识。我们的目...
    谦言忘语阅读 182,279评论 77 310
  • 目标 平常我们做iOS开发,会经常遇到打开其他的APP的功能。本篇文章讲的就是打开别人的APP的一些知识。我们的目...
    橙娃阅读 11,637评论 0 5
  • 目标 本篇文章讲的是我做的一个仿微信分享到朋友圈的功能。事先声明,楼主并不知道微信的分享具体是怎么实现的,只是按照...
    谦言忘语阅读 11,866评论 3 56
  • 1. 前些年,在学校刚下课的我收到堂姐的微信:爷爷快不行了,在街上溜达时突然摔倒了。 颤抖着手翻开通讯录,边找我爸...
    麋鹿的兔阅读 3,698评论 4 4
  • 感师恩 多情的9月,迎来了我小学生活最后一个教师节。踏着这满地的金黄,手捧鲜花,夜凉如水,感师恩…… 鱼儿离不开水...
    怡然自得66阅读 3,443评论 0 4

友情链接更多精彩内容