[Phonegap+Sencha Touch] 移动开发61 使用 URL Schemes实现一个App启动另一个App的功能
来源:互联网 发布:禁用网络后如何恢复 编辑:程序博客网 时间:2024/06/05 00:22
通过URL Scheme来启动APP是一种很常见的做法,比如:
系统程序:
- tel:1-408-555-5555
- sms:1-408-555-1212
- mailto:frank@wwdcdemo.example.com
应用市场(Google Play、Amazon Appstore ):
- market://details?id=your.package.name
- amzn://apps/android?p=your.package.name
常用软件:
- sinaweibo://
- renren://
- youku://
- mqq://
- weixin://
- taobao://
- twitter://
- fb://
- youtube://
————————————————————————————————————————————————————
英文原文: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并向其发送特定的数据。
iOS设置
第一步是修改应用程序的-info.plist文件(设置我们的自定义URL)。
下面是一个例子,图示是在XCode中给* -info.plist在设置了URL Schemes为"urlschemeexample"之后的样子。
成功build之后,我们的App现在就可以从一个URL启动了。
比如这个URL就可以启动我们的App了:urlschemeexample://foo=bar
如果你只是想启动或者或恢复你的应用,可以不带任何查询参数。然而,在我们的例子中,我们希望App可以接受通过URL传来的查询字符串数据,因此我们需要继续下一步。
index.html
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)。
onURLLaunch函数
这个函数是在控制器的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)
- [Phonegap+Sencha Touch] 移动开发61 使用 URL Schemes实现一个App启动另一个App的功能
- [Phonegap+Sencha Touch] 移动开发70 cordova app中使用增强的webview
- [Phonegap+Sencha Touch] 移动开发77 Cordova Hot Code Push插件实现自动更新App的Web内容
- [Phonegap+Sencha Touch] 移动开发17 使用桌面chrome调试安卓设备上的chrome和cordova app(webview)
- [Phonegap+Sencha Touch] 移动开发35 让Cordova app使用Chromium内核的WebView(Crosswalk/XWalk)
- [Phonegap+Sencha Touch] 移动开发76 让cordova app访问远端网站也能调用cordova插件功能
- [Phonegap+Sencha Touch] 移动开发4、Sencha Touch初步使用
- [Phonegap+Sencha Touch] 移动开发4、Sencha Touch初步使用
- [Phonegap+Sencha Touch] 移动开发7、Sencha Touch图标的使用与自定义
- [Phonegap+Sencha Touch] 移动开发7、Sencha Touch图标的使用与自定义
- HTML5 Mobile App移动框架Sencha Touch实战OA系统开发(PhoneGap打包应用)
- [Phonegap+Sencha Touch] 移动开发2、PhoneGap/Cordova初步使用
- [Phonegap+Sencha Touch] 移动开发2、PhoneGap初步使用
- [Phonegap+Sencha Touch] 移动开发36 Phonegap/Cordova项目的图标和启动画面(splashscreen)配置
- sencha touch 2与phonegap结合开发web app
- sencha touch 2与phonegap结合开发web app
- sencha touch 2与phonegap结合开发web app
- [Phonegap+Sencha Touch] 移动开发5、Sencha touch结合Phonegap/Cordova使用
- Android开发者必知的5个开源库
- Android—ContentProvider
- Eclipse开发环境下Java可视化编程
- WCHAR char CString等常用类型互转
- Zookeeper简介、基本概念和工作原理
- [Phonegap+Sencha Touch] 移动开发61 使用 URL Schemes实现一个App启动另一个App的功能
- java生成不重复随机数
- C++Primer第五版 3.5.1节练习
- 程序员的 13 种噩梦,你遇到过哪些?
- Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等
- Storm 的流量控制和多线程并发处理
- MySQL之——Centos中安装多个mysql数据库的配置实例
- 状态机思路在程序设计中的应用
- Java中使用JAR文件