[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)

0 0
原创粉丝点击