IOS应用跳转URL scheme和Universal Links
简介IOS常见的跳转方式有URL scheme和Universal Links。这两个均可以实现App之间的跳转以及通过网页实现跳转到对应的App内。通过本文章可以了解到两者的区别和具体的使用方法以及参数的传递。应对常见的几种跳转需求。URL scheme:需要配置URL scheme可以通过该URL直接启动App。该URL实际上不是真正可以访问的网页域名因此如果App没有安装就没有任何反应。并且URL scheme是各自开发者在App内设置的所以可能出现冲突的情况。Universal Links:配置实际可以访问的域名并且根据配置表可以将路径和对应的App进行关联。如果已经安装了App可以直接跳转到App。如果没有安装App可以直接跳转到对应的网页。官方文档https://developer.apple.com/documentation/xcode/allowing-apps-and-websites-to-link-to-your-content?languageobjc配置Url Scheme1.配置打开Xcode工程在Info.plist的URL Types添加一个新的Url Scheme。需要填入Identifier和URL Schemes这里分别命名为youridentifier和yourscheme需要注意URL Schemes需要起的复杂一些避免重名。Tips如果出现App A与App B也定义了相同的URL Scheme。那么访问URL Scheme的时候只会访问其中一个应用另外一个App的URL Scheme就失效了2.测试链接是否成功设置完Url Scheme后在测试设备上安装该应用。之后可以通过safari或者备忘录直接通过URL Scheme访问。Url Scheme的形式有点类似于网页。可以直接在Safari输入yourscheme://xxxxx如果弹出提示框是否访问该应用说明配置成功 。这里填写的yourscheme就是Info.plist中填写的URL Scheme。://之后填写的是自定义的参数。可以通过参数来得知启动的来源。3.添加启动参数获取代码Unity获取启动参数需要通过继承UnityAppController的方式进行。在Assets/Plugins/IOS/目录下添加YourAppController.h和YourAppController.mm对应代码如下SQL#ifndef YourAppController_h#define YourAppController_h#import UnityAppController.hinterface YourAppController : UnityAppControllerend#endifSQL#import Foundation/Foundation.h#import YourAppController.himplementation YourAppController- (void)applicationDidBecomeActive:(UIApplication*)application{[super applicationDidBecomeActive:application];}- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions{[super application:application didFinishLaunchingWithOptions:launchOptions];return YES;}// UIApplicationOpenURLOptionsKey was added only in ios10 sdk, while we still support ios9 sdk- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionaryNSString*, id*)options{[super application:app openURL:url options:options];if(url){UnitySendMessage(YourReceiver, YourMethod, url.absoluteString.UTF8String);}return YES;}//进入 后台- (void)applicationDidEnterBackground:(UIApplication*)application{[super applicationDidEnterBackground:application];}//进入前台- (void)applicationWillEnterForeground:(UIApplication*)application{[super applicationWillEnterForeground:application];}end//设置当前类为启动类IMPL_APP_CONTROLLER_SUBCLASS(YourAppController);获取参数的函数为- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionaryNSString*, id*)options获取完参数之后可以通过UnitySendMessage的方式在C#端处理逻辑配置Universal Links1.开发者后台配置在developer.apple.com的后台点击对应的Identifiers,勾选Associated Domains2.工程配置打开Xcode工程在SigningCapabilities页签点击Capability 之后选择Associated Domains之后添加具体的Associated Domains。比如你的域名为yourdomains.com,填入的具体形式为applinks:yourdomains.com3.apple-app-site-association配置然后设置apple-app-site-association。apple-app-site-association的格式如下details是一个列表。列表内是每个应用对应的配置。appID的格式是前面为TeamID(可以在developer.apple.com查看)后面则是应用的bundleid。path为应用对应的路径*为通配符。下面的例子代表有三个app。打开yourdomains.com/path1/路径下的网页访问app1。yourdomains.com/path2/代表访问app2。其他yourdomains.com/下的网页均访问app3。需要注意的是配了下一级路径的比如paths: [/path1/*]也要在结尾加上*。还有就是如果没有下一级路径比如下面的app3的paths: [*]。建议配置在数组的末端。之前测试时这个apple-app-site-association是顺序访问的所以如果配在顶部会出现所有网页均访问*的情况。XML{applinks: {apps: [],details: [{appID: TEAMID.BUNDLEID1,paths: [/path1/*]}, {appID: TEAMID.BUNDLEID2,paths: [/path2/*]}, {appID: TEAMID.BUNDLEID3,paths: [*]}]}}4.上传apple-app-site-association到文件服如果自己未搭建文件服务器可以直接使用阿里云。这里需要注意必须将apple-app-site-association放置在根目录或者根目录/.well-known/ 目录下https://yourdomains.com/apple-app-site-associationhttps://yourdomains.com/.well-known/apple-app-site-association5.测试链接是否成功下面以访问app1为例子进行链接测试。前面的配置都完成之后用测试设备安装应用确保网络是正常的。由于之前配置的Associated Domains为yourdomains.comapp1在apple-app-site-association内配置的路径为[/path1/*],所以最后需要将域名和path拼在一起https://yourdomains.com/app1可以将该网址放在复制到备忘录然后长按该路径。如果出现如下在xxx中打开的提示说明Universal Links配置正确。并且可以直接点击该链接进入App。也可以直接在safari浏览器输入上面的网址。网页的顶部会出现在xxxApp中打开的提示。并且点击右侧的打开按钮6.注意事项apple-app-site-association不能有后缀名apple-app-site-association是在app第一次安装和后续更新的时候获取。如果网络不好有可能出现没有获取到导致Universal Link失效的情况如果修改了apple-app-site-association的内容apple-app-site-association生效需要等待一段时间。同时需要卸载重装后再测试苹果会先访问.well-known/下的apple-app-site-association如果不存在再访问根目录下的文件所以建议将文件存放在.well-known/下减少访问服务器的次数访问的网址需要配置为httpsUnity内配置上面修改Xcode工程添加Url Scheme和AssociatedDomains的操作也可以通过Editor的PostProcessBuild脚本。进行添加。具体代码如下添加Url SchemeXMLpublic static void SetInfoList(string buildPath){string listPath buildPath /Info.plist;PlistDocument plist new PlistDocument();plist.ReadFromString(File.ReadAllText(listPath));// 在“info”标签栏的“URL type“添加“URL scheme”PlistElementArray urlArray plist.root.CreateArray(CFBundleURLTypes);PlistElementDict dict urlArray.AddDict();dict.SetString(CFBundleTypeRole, Editor);dict.SetString(CFBundleURLName, youridentifier);PlistElementArray urlSchemes dict.CreateArray(CFBundleURLSchemes);urlSchemes.AddString(yourscheme);File.WriteAllText(listPath, plist.WriteToString());}设置Associated DomainsXML// 设置Associated Domainspublic static void SetAssociatedDomains(string pbxProjectPath, string domainUrl){//默认 Target Name, 你自己的可能不一样string targetName Unity-iPhone;//Set the entitlements file name to what you want but make sure it has this extensionstring entitlementsFileName my_app.entitlements;var entitlements new ProjectCapabilityManager(pbxProjectPath, entitlementsFileName, targetName);entitlements.AddAssociatedDomains(new string[] { applinks: domainUrl });entitlements.WriteToFile();}IOS跳转的解决方案跳转流程下面举一个简单的邀请好友获取奖励的例子。1.配置一个网页负责承接跳转的业务和必要的信息展示。应用可以将该网址分享到IM工具并且根据业务需要添加具体的参数。比如玩家A给玩家B分享了关于app1的邀请链接https://yourdomains.com/app1/index.html?typeinviteuid10000这里路径为Universal Link的地址。前端将网页部署在app1/index.html的位置。分享的参数为typeinviteuid10000(参数可以自定义)2.玩家B在IM工具内点开该链接后如果玩家已经安装了该应用app1可以直接跳转到应用内并且将该参数传递给app1。如果未安装该应用或者不支持直接跳转。可以在该网页内配置下载的按钮或者其他相关的跳转链接。3.假如玩家B通过上面的链接正常进入到app1内可以获取typeinviteuid10000的参数。玩家B与服务器通信完成对玩家A的邀请奖励发放跳转流程到此结束。部分网页逻辑有的IM软件比如Messenger点开Universal Link并不会直接跳转App。但是可以通过网页调用URL Scheme进行跳转。所以可以添加一下的逻辑完成跳转操作。网页启动的时候先判断是不是IOS设备。如果是可以直接通过URL Scheme跳转。XML(function () {let userAgentInfo navigator.userAgent;let Agents [iPhone,iPod,iPad,];let search location.search;for (let i 0; i Agents.length; i) {//判断是不是IOS设备if (userAgentInfo.indexOf(Agents[i]) 0) {//获取网页中参数let webParams location.search;window.location.href yourscheme://webParams;break;}}})();

相关新闻

GeoLibre导入CAD图纸教程:DXF/DWG图层选择与坐标系设置详解

GeoLibre导入CAD图纸教程:DXF/DWG图层选择与坐标系设置详解

GeoLibre导入CAD图纸教程:DXF/DWG图层选择与坐标系设置详解 【免费下载链接】GeoLibre A lightweight, cloud-native GIS platform for visualizing, exploring, and analyzing geospatial data. It runs in the web browser, on the desktop, on mobile, and insid…

2026/11/11 1:41:11 阅读更多 →
巧用AI编程,qwencode轻松提高工作效率!

巧用AI编程,qwencode轻松提高工作效率!

小伙伴们,还在为一堆文件夹里的图片手动重命名发愁吗?遇到“2级”“3级”的图片,还要一个个改前缀、分文件夹?今天就教你巧用 AI 编程,几秒钟自动遍历所有子文件夹,把“2级”图片改成“大牌-文件夹名”&…

2026/10/24 22:54:48 阅读更多 →
银河麒麟V10搭建达梦8数据库

银河麒麟V10搭建达梦8数据库

大家好,我是早九晚十二,目前是做运维相关的工作。写博客是为了积累,希望大家一起进步! 我的主页:早九晚十二 目前,国产化服务器越来越多,操作系统的国产化使得大家对中间件都有了需求&#xff0…

2026/10/25 0:04:54 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/10 23:32:01 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/10 23:32:03 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/10 2:03:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/10 16:14:15 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/10 12:51:50 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/10 23:32:10 阅读更多 →

日新闻

周新闻

月新闻