iOS-通过URL Schemes实现跳转

一、基本思路

iOS中,可以通过URL Scheme从Safari跳转到目标app,这个URL Scheme是你与后端共同定义的协议。通过创建指定的URL Scheme,就可以从Safari跳转到目标app的首页,如果想要跳转到具体某个页面并取得参数,就需要在URL后面添加参数。

二、实现过程

1. 创建应用

可以看到应用里面有两个控制器,一个是首页(HomeViewController),另一个是详情页(DetailViewController),下面我们会分别实现跳转到首页和详情页。


2. 注册自定义URL Scheme

注册完URL Scheme,Info.plist文件里面就多出这个货。


接下来我们先来实现从Safari打开APP(进入到首页),后面再继续实现打开APP的详情页并传值(从首页push到详情页并传值)。

3. 用Safari跳转到APP首页

在AppDelegate.h里面添加判断代码

- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options {
   //从Safari/其他APP打开
   //注意这里url.scheme的值是全小写的,为了避免出错,在设置URL Schemes的时候尽量为小写。
   if([url.scheme isEqualToString:@"testapp"]) {
      return YES;
   }
   return NO;
}

在Safari输入网址

打开格式为:URL Scheme:// (不区分大小写)
注意:要安装了目标APP方可通过Safari来打开

点击Go!然后就打开APP首页了,是不是so easy!


4. 用Safari跳转到APP详情页

我这里自行定义了这么个URL:testapp://testHost.cn/test.html?missionId=123

- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options {
   //从Safari/其他APP打开
   if([url.scheme isEqualToString:@"testapp"]) {
      //进入详情页
      if([url.host isEqualToString:@"testHost.cn"]) {
         if([url.query hasPrefix:@"missionId="]) {
            NSString *missionId = [[url query] substringFromIndex:[[url query] rangeOfString:@"missionId="].location + 10];

            DetailViewController *detailVC = [DetailViewController new];
            detailVC.missionId= missionId;

            UINavigationController *nav = (UINavigationController *)self.window.rootViewController;
            [nav pushViewController:detailVC animated:YES];
         }
      }
      return YES;
    }
    return NO;
}

重新运行程序后,在Safari输入网址


然后就可以打开APP详情页啦,并且获取到了参数missionId。


三、结语

这是我在工作上遇到的问题,现在记录下来,方便以后查询,也分享给有需要的伙伴。如果有错误或者不清楚的地方,烦请大伙提出来,谢谢~

Demo地址

推荐阅读更多精彩内容