1、URL Scheme
URL Scheme是iOS、Android都兼容的机制,只需要原生App开发时注册Scheme即可,用户点击此类链接时,会自动唤醒App,并借助URL Router机制跳转到指定页面。
尽管URL Scheme兼容性高,但却存在许多限制,比如:
国内各个厂商浏览器差异很大,当要被唤醒的目标App未安装时,这个链接很容易出错。
当注册有多个Scheme相同的时候,目前是没有办法区分的。
不支持从其他App中的UIWebView中跳转到目标App。
被部分主流平台禁止,微信、微博、QQ浏览器、手机百度中都已经被禁止使用。
2、苹果的Universal Link
Universal Link是iOS9后苹果推出的通用链接技术,能够方便地通过一个>
相对Scheme的优势在于,Universal Link是一个Web Link,因此少了很多麻烦。
3、安卓的App Links
Android M以上版本可以通过App Links,让用户在点击一个链接时跳转到App的指定页面,前提是这个App已经安装并经过验证。App Links的最大的作用,就是可以避免从页面唤醒App时出现的选择浏览器选项框,前提是必须注册相应的Scheme,就可以实现直接打开关联的App。
4、第三方服务(集成SDK)
如果嫌精准度不够高或者实现难度太大的话,可以直接集成SDK实现,毕竟这几项技术是基于系统平台的,Android 及 iOS 每个系统版本的迭代后,配置方式都会有新的变化,且国内安卓机型众多,浏览器众多等也会导致出现兼容问题,开发者自行研发的话,资源配置以及系统更新后的维护成本是比较高的,还要考虑各种各样的跳转场景问题。比如openinstall等第三方SDK。
app跳转到另一个app授权需要第三方用户登录。
app跳转需要获取第三方授权,使用第三方数据的情况,实现app跳转到另一个app授权。因此app跳转到另一个app授权需要第三方用户登录。
授权是组织运作的关键,它是以人为对象,将完成某项工作所必须的权力授给部属人员。
官方详情介绍
uni-app的页面跳转只能跳转本地页面,且目标页面必须在pagesjson中注册。跳转方式与小程序/vue的极为相似,只是方法和标签有所不同,分为 和 两种。
类似Vue的 <router-link> 标签
类似Vue routerpush({ path: 'xxx' }) 方法,uni-app提供了6钟不同的跳转方式,以 unixxx 方式调用。
官网详情
保留 当前页面,跳转到应用内的某个页面,可使用 uninavigateBack 返回到原页面
object参数说明(其他跳转方式的参数与之大同小异):
接收数据(其他跳转方式的接收参数方法与之相同):
关闭 当前页面,跳转到应用内的某个页面 ,可理解为重定向页面
关闭所有 页面,跳转到应用内的某个页面
注意: 如果调用了 unipreloadPage(OBJECT) 不会关闭,仅触发生命周期 onHide
跳转到tabBar页面,并 关闭所有非tabBar 页面
注意: 如果调用了 unipreloadPage(OBJECT) 不会关闭,仅触发生命周期 onHide
返回上一页面/多级页面。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层
预加载页面,是一种性能优化技术。被预载的页面,在打开时速度更快。
平台差异说明:
H5 平台:
预加载 /pages/test/test 对应的js文件,不执行页面预渲染逻辑
App-nvue 平台:
预加载nvue页面 /pages/test/test
注意事项
eg
HBuilderX 2712+的hello uni-app,在navigator示例和uni ui的日历示例中增加了页面预载示例。
首先在app中设置scheme,如下图所示:
data包含属性如下:
1scheme
2host
3port
4path
5pathPattern
6pathPrefix
7ssp
8sspPattern
9ssPrefix
除了scheme后面的都是可选项。
例如:testscheme://lmcom:8080/mainid=2&name=lbm
lmcom代表是host域名,8080端口号port,main为path,
后面的为query参数。
从h5页通过scheme跳转app方式为:
如图第三个a标签。
只要android中配置的scheme与a标签中的testapp2相同就可以调起。a标签中有域名和端口号,path,和参数。android app中只配置了scheme,只要scheme匹配就可以调起。h5配置的参数也可以在activity中获取。获取方式为:
获取的query就是号后面的参数。如果andrid只配置了schemeh5可以写域名端口好及其他的参数,也能调起。
首先在plist文件里面设置。
URL identifier 一般为反域名+项目名称 (尽可能保证少重复)
URL Schemes是一个数组。一个APP可以添加多个。该参数为跳转时使用的标识。
1:跳转safari比较简单
2:跳转回APP
safari按钮打开连接(URL Scheme设置的参数)sxxxxk:// 之后会d窗提醒,确认要返回app,点击确定就启动APP。(ios9直接url跳转safari之后左上角有一个返回的小按钮,貌似不用做URL Scheme就可以实现。但是URL Scheme更强大一些。可以传参数)
3:URL Scheme传参数
safari跳转回APP时,打开连接 sxxxxk://xxxx
跳回APP之后,调用该方法,输出为
url: sxxxxk://xxxx
scheme: sxxxxk
query: xxxx
(safari跳回APP连接后面添加?再添加参数xxx或者xxx1=1&xxx2=2)
新建两个项目 demo1 和 demo2。完成项目 demo1 跳转到项目 demo2
在项目 demo2 的 Infoplist 中添加字段 URL types -> URL Schemes,配置供别的app跳转使用的唯一URL demo2JumpUniqueKey(不要使用 _ ,不然会跳转失败)。
在项目 demo1的 Infoplist 中添加字段 LSApplicationQueriesSchemes, 类型设置为 Array,添加项目 demo2 中配置的URL demo2JumpUniqueKey。
项目 demo1 中跳转的方法
项目 demo2 中接收项目 demo1 跳转传来的参数
如果存在 SceneDelegate 则使用 SceneDelegateswift 的方法
如果不存在 SceneDelegate 则使用 AppDelegateswift 的方法
本文由 mdnice 多平台发布
android中intent实现两个不同应用Activity跳转,可以用以下的方法:开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用。一般我们知道了另一个应用的包名和MainActivit y的名字之后便可以直接通过如下代码来启动:[java] view plaincopyIntent intent = new Intent(IntentACTION_MAIN);intentaddCategory(IntentCATEGORY_LAUNCHER);ComponentName cn = new ComponentName(packageName, className);intentsetComponent(cn);startActivity(intent);但是更多的时候,我们一般都不知道目标应用程序的启动Activity的类名,而只知道包名,接下来就需要这么做了,我封装成了一个方法,如下所示:[java] view plaincopyprivate void doStartApplicationWithPackageName(String packagename) {// 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等PackageInfo packageinfo = null;try {packageinfo = getPackageManager()getPackageInfo(packagename, 0);} catch (NameNotFoundException e) {eprintStackTrace();}if (packageinfo == null) {return;}// 创建一个类别为CATEGORY_LAUNCHER的该包名的IntentIntent resolveIntent = new Intent(IntentACTION_MAIN, null);resolveIntentaddCategory(IntentCATEGORY_LAUNCHER);resolveIntentsetPackage(packageinfopackageName);// 通过getPackageManager()的queryIntentActivities方法遍历List<ResolveInfo> resolveinfoList = getPackageManager()queryIntentActivities(resolveIntent, 0);ResolveInfo resolveinfo = resolveinfoListiterator()next();if (resolveinfo != null) {// packagename = 参数packnameString packageName = resolveinfoactivityInfopackageName;// 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packagenamemainActivityname]String className = resolveinfoactivityInfoname;// LAUNCHER IntentIntent intent = new Intent(IntentACTION_MAIN);intentaddCategory(IntentCATEGORY_LAUNCHER);// 设置ComponentName参数1:packagename参数2:MainActivity路径ComponentName cn = new ComponentName(packageName, className);intentsetComponent(cn);startActivity(intent);}}
首先介绍最原始的跳转方法,类似于html中的 a 标签,不过在uniapp中需要将 a 标签换成
<navigator url='跳转的地址'>……</navigator>
下面我们来重点介绍下跳转传值的方法
<view @tap="toOpportnity(itemid)">转商机</view>;
写一个onLoad函数
对象传参的接收方法
单个参数的接收,这里使用id来进行介绍
首先要把传递过来的id进行赋值
请求接口,接口的url地址后面要加上传递过来的id /${thisid}/
完整步骤如下:
对象传参报错解决方案(详细请看本篇文章: >
Scheme这个词语我们可以在Uri使用时见到,有 urigetScheme() 方法。在android中scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。
我们来看看谷歌官方对其data描述:见 >
以上就是关于如何从微信浏览器中跳转到APP指定页面全部的内容,包括:如何从微信浏览器中跳转到APP指定页面、app跳转到另一个app授权、uni-app项目中的页面跳转方式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)