URL Scheme app 跳转

目录

  • 相关名词了解
  • 具体操作步骤

一、相关名词了解

白名单:“白名单”的意义是要检查当前设备上是否安装了其他App,而不是打开其他App必须添加“白名单”。

二、具体操作步骤

  1. 配置自己项目的url scheme, 注意这个是配置自己项目,假设你的项目是zhenxin, 这里的配置的URL Schemes:zhenxin是代表你自己项目。 identifer:选填,因为他其实就是url schemes的拓展一样,一般我们zhenxin:// 就可以跳转,如果加了这个,zhenxin://com.chengfu.ZhenXin,也是跳转一样的。
    URL Scheme app 跳转_第1张图片
  2. 配置白名单:验证某个app是否安装。
  • 加白名单的步骤
    1.假设我们要跳转到zhao app, 我们需要获取到zhao app 他在Xcode 所配的url schemes。如:他配置的URL Schemes : zhao, identifer: com.cheng.zhao (通常可以选择用自己项目的bundle id).

    2.在项目中在info.plist中添加跳转的app,判断是否存在的白名单。

    应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装。

    如果没有将 scheme 添加到白名单中却在 -canOpenURL: 中使用了,你的查询会报error。(需要注意的是,最多只能添加50个)

  <key>LSApplicationQueriesSchemeskey>
	<array>
		<string>zhao(这个就是我们跳转的app的url scheme)string>
	array>

3.当点击按钮,开始跳转到其他app.

@IBAction func openZhaoAppClick(_ sender: UIButton) {
        //方法一:先判断在跳转
        let urlString = "zhao://com.cheng.zhao"
//        let urlString = "zhao://"
        let appUrl = URL(string: urlString)
        let appIsExist = UIApplication.shared.canOpenURL(appUrl!)
        if appIsExist == true {
            if let url = appUrl {
                //根据iOS系统版本,分别处理
                if #available(iOS 10, *) {
                    UIApplication.shared.open(url, options: [:],
                                              completionHandler: {
                                                (success) in
                    })
                } else {
                    UIApplication.shared.openURL(url)
                }
            }

        }else{
            print("不存在zhao app")
        }
        
        //方法二:直接跳转,不加白名单进行判断(不推荐)
        
//        if let url = appUrl {
//            //根据iOS系统版本,分别处理
//            if #available(iOS 10, *) {
//                UIApplication.shared.open(url, options: [:],
//                                          completionHandler: {
//                                            (success) in
//                })
//            } else {
//                UIApplication.shared.openURL(url)
//            }
//        }

        
        
    }

4.如果别人通过以上方法跳转到我们自己的app,我们可以通过代理,获取到整个跳转链接,包括链接中对方传递过来的参数等。

 func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        
        let options1 = options as NSDictionary
        
        let str1 = options1["UIApplicationOpenURLOptionsSourceApplicationKey"] ?? ""
        print("url:")
        print(url)
        print("==========")
        print("url scheme:")
        print(url.scheme ?? "")
        print("==========")
        print("url host:")
        print(url.host ?? "")
        print("==========")
        print("url path:")
        print(url.path)
        print("==========")
        print("url query:")
        print(url.query ?? "")
        
        print("==========")
        print("url identier:")
        print(options)
    
        print("==========")
        print("bundle id:")
        print(str1)
    
        
        
        
//        if str1 as! String == "cn.cf.xingxing" {
//            if url.absoluteString.contains("authdone"){
//                let vc = DetailViewController()
//                UIApplication.shared.keyWindow?.rootViewController?.present(vc, animated: true, completion: nil)
//
//
//            }
//            return true
//        }

        
        return true
     
    }

我们从这里,进而可以分析出来,url scheme 他的一个路径组成部分。
URL Scheme://host(主机)/path(路径,跳转到哪一个页面)/query(对方传过来的参数)
URL Scheme app 跳转_第2张图片

你可能感兴趣的:(Swift,swift,URL,Scheme)