通过URL Scheme来启动APP是一种很常见的做法,比如:
系统程序:
————————————————————————————————————————————————————
英文原文:https://www.sencha.com/blog/using-url-schemes-with-sencha-touch-ios-and-cordova/
原文只介绍了iOS的实现,翻译后面我补充了Android的实现。
本文后面提供了一个Cordova插件,可以很简单的实现本文所说的功能。
翻译:
一个App可以启动同一设备上的其他App,可以方便和提高用户体验。URL Schemes是一种机制,提供了一个App启动或恢复另一个App的能力。但URL Schemes真正强大的是用它来传递数据到另一个App,从而改变其它App的行为或引导用户到其它App的一个特定位置。
看到这里,你是不是想在你的App上实现URL Schemes呢?
在今天的文章中,我将通过一个URL启动一个App并向其发送特定的数据。
第一步是修改应用程序的-info.plist文件(设置我们的自定义URL)。
下面是一个例子,图示是在XCode中给* -info.plist在设置了URL Schemes为"urlschemeexample"之后的样子。
成功build之后,我们的App现在就可以从一个URL启动了。
比如这个URL就可以启动我们的App了:urlschemeexample://foo=bar
如果你只是想启动或者或恢复你的应用,可以不带任何查询参数。然而,在我们的例子中,我们希望App可以接受通过URL传来的查询字符串数据,因此我们需要继续下一步。
Cordova将调用一个全局函数 handleOpenURL。这个函数有一个参数:一个URL字符串,用于启动/恢复应用。在此过程中,我们要在Sencha Touch的 index.html文件中添加的handleOpenURL函数。在这,我们把传来的URL保存在window的launchURL属性中,以便当我们Sencha Touch App初始化之后,可以访问到这个URL字符串。
我们将在控制器的初始化方法中检查App是否是由URL Schemes启动。如果"launchURL"属性窗口的存在,我们就知道App是从URL启动的。在这种情况下,控制器会调用一个"onURLLaunch"的函数(这个函数待会我们会在控制器中写上)。
继续,在控制器的“初始化”方法中,删除原handleOpenURL函数(它的目的已经完成了,App之后的运行用不到它了)。
我们现在需要一个新的"handleOpenUrl"函数,用于切换到一个已经启动的APP(也就是resume,即恢复一个后台运行的App)。
这个函数是在控制器的init中调用的,既可以用于App启动,也可用于App的恢复。它有两个参数,第一个是完整的URL,第二个参数是launchType(表示类型是“启动”或“恢复”)。根据第二个参数,你可以对“启动”类型和“恢复”类型进行一些不同的操作。
最后一步是提取查询字符串,并使用Ext.Object.fromQueryString将查询字符串转换为一个Object(如"foo=bar" 转为 { foo: 'bar' }),然后App可以利用这个Object执行你要的行为。
搞定了!正如你看到的,URL Schemes,可以从一个App发送任何信息到另一个App。
上面是原文的翻译,只介绍了iOS的URL Schemes的配置。下面补充Android的URL Schemes如何实现。
Android是在AndroidManifest.xml中配置URL Schemes的。如下图:
如上图,在主Activity中增加一个intent-filter(不懂的可以百度),其中<data android:scheme="aio5app" />就是表示App可以响应"aio5app://"开头的URL。
上面的修改,只是可以启动App,但是要如何获取到URL,并根据查询参数进行一些特定的操作呢?iOS原生支持了handleOpenURL的js函数的调用(也就是只要提供了这个js全局函数,通过URL打开App时就能自动调用它)。但是Android没有提供这种简便的“功能”,而需要自己模拟支持handleOpenURL。
这就涉及安卓四大组件之一:意图(Intent)。当App被URL引导启动或者恢复的时候,App其实是被一个意图启动或恢复的,这个意图里面带有这个启动它的URL,所以我们需要在App启动或者恢复时获取到这个URL。
不贴具体代码了,这里提供一个已经封装好的Cordova插件(支持Android、iOS、Windows),用起来很方便,插件地址如下:
https://github.com/EddyVerbruggen/Custom-URL-scheme
使用方法,可以看插件的README.md
欢迎加入Sencha Touch + Phonegap交流群
1群:194182999 (满)
2群:419834979
共同学习交流(博主QQ:479858761)