iOS Swift URL Scheme APP跳转safari以及跳到另一个APP

本人亲测有效!更多交流可以家魏鑫:lixiaowu1129,公重好:iOS过审汇总,一起探讨iOS技术!

OC版本语言

alt

首先在plist文件里面设置。

URL identifier 一般为反域名+项目名称 (尽可能保证少重复)

URL Schemes是一个数组。一个APP可以添加多个。该参数为跳转时使用的标识。

1:跳转safari比较简单

NSString *iTunesLink = @"http://www.xxxx.com";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

2:跳转回APP

safari按钮打开连接(URL Scheme设置的参数)sxxxxk:// 之后会弹窗提醒,确认要返回app,点击确定就启动APP。(ios9直接url跳转safari之后左上角有一个返回的小按钮,貌似不用做URL Scheme就可以实现。但是URL Scheme更强大一些。可以传参数)

3:URL Scheme传参数

safari跳转回APP时,打开连接 sxxxxk://?xxxx

APPDelegate.mm里面实现
- (BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(nonnull id)annotation {
    NSLog(@"url : %@", url);
    NSLog(@"scheme : %@", url.scheme);
    NSLog(@"query : %@", url.query);
    return YES;
}

跳回APP之后,调用该方法,输出为

url: sxxxxk://?xxxx

scheme: sxxxxk

query: xxxx

(safari跳回APP连接后面添加?再添加参数xxx或者xxx1=1&xxx2=2)

Swift版本语言

新建两个项目 demo1 和 demo2。完成项目 demo1 跳转到项目 demo2

在项目 demo2 的 Info.plist 中添加字段 URL types -> URL Schemes,配置供别的app跳转使用的唯一URL demo2JumpUniqueKey(不要使用 _ ,不然会跳转失败)。

alt

在项目 demo1的 Info.plist 中添加字段 LSApplicationQueriesSchemes, 类型设置为 Array,添加项目 demo2 中配置的URL demo2JumpUniqueKey。

alt

项目 demo1 中跳转的方法

//不带参数的跳转
//guard let urlLocal = URL(string: "demo2JumpUniqueKey:"else { return }
//带参数跳转
guard let urlLocal = URL(string: "demo2JumpUniqueKey://name=lisi,password=123"), UIApplication.shared.canOpenURL(urlLocal) else {
    print("跳转失败")
    return
}
UIApplication.shared.openURL(urlLocal)

项目 demo2 中接收项目 demo1 跳转传来的参数

如果存在 SceneDelegate 则使用 SceneDelegate.swift 的方法

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    
    guard let context = URLContexts.first else { return }
    
    //demo2JumpUniqueKey://name=lisi,password=123
    print(context.url)
    
    //<UISceneOpenURLOptions: 0x600002cb26a0; sourceApp: com.swiftprimer.demo1; annotation: (null); openInPlace: NO>
    print(context.options)
}

如果不存在 SceneDelegate 则使用 AppDelegate.swift 的方法

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    
    //demo2JumpUniqueKey://name=lisi,password=123
    print(url)

    return true
}

本文由 mdnice 多平台发布

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值