APP之间的跳转

01 APP之间的跳转

1. APP之间的跳转

1. 创建2个测试工程: test1 & test2

需求:我们要让点击test1的某个按钮,跳转到test2项目,并且带上test1的某个参数

2. 步骤
  • 在test2中,配置URL Types

    • 在URL Schemes中写上自己的标记:“test2” ,意思是别人可以通过这个标记找到我,跳转到我这里来
      如下图在这里插入图片描述
  • 在test1中,配置test2的白名单,意思是我可以跳转到test2中去

    • 在Info.plist文件中,添加LSApplicationQueriesSchemes字段(Array类型)
    • 再添加配置白名单:“test2”
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2N22FeIq-1657242289966)(:/8c133bc84e5640eaa606e830f9e3bed5)]
3. 代码部分
  • test1中代码
class ViewController: UIViewController {

   override func viewDidLoad() {
       super.viewDidLoad()
       // Do any additional setup after loading the view.
   }

   @IBAction func btn1(_ sender: Any) {  // 跳转到app
       let url = URL(string: "test2://")!
       print("btn1=\(url.path)\n query=\(String(describing: url.query))")
       if !UIApplication.shared.canOpenURL(url) {
           return
       }
       UIApplication.shared.open(url, options: [:]) { isOK in
           print(isOK)
       }
   }
   @IBAction func btn2(_ sender: Any) { // 跳转到特定页面
       let url = URL(string: "test2://test1/vc2?name=lisi")!
       print("btn2=\(url.path)\n query=\(String(describing: url.query))")
       if !UIApplication.shared.canOpenURL(url) {
           return
       }
       UIApplication.shared.open(url, options: [:]) { isOK in
           print(isOK)
       }
   }
}

  • test2代码
    • 在AppDelegate中
import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {


  var window: UIWindow?
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
      let vc = ViewController()
      window = UIWindow(frame: UIScreen.main.bounds)
//        window?.backgroundColor = .white
      window?.rootViewController = UINavigationController(rootViewController: vc)
      window?.makeKeyAndVisible()
      return true
  }
  
  func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
      dealUrl(url: url)
      print("application2")
      return true
  }
  
  func dealUrl(url: URL) {
      if let nav = window?.rootViewController as? UINavigationController {
          nav.popToRootViewController(animated: false)
          let rootvc = nav.children[0]
          print("url.path==\(url.path)")
          if  url.path == "/vc2" {
              let vc2 = SecondViewController()
              let str = url.query?.split(separator: "=").last
              let name = String(str!)
              vc2.name = name // 接收参数
              
              rootvc.navigationController?.pushViewController(vc2, animated: true)
          }
      }
     
  }
}
  • 参数解析
let url = URL(string: "https://www.taobao.com/markets/bao/xiangbao?spm=a21bo.2017.201867-main.5.5af911d9blzLlJ")
print("协议=",url!.scheme ?? "","IP或者是域名=",url!.host ?? "","路径=",url!.path ,"参数=",url!.query ?? "")

请添加图片描述

4. 三方框架CTMediator
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值