美文网首页Cocos CreatorAndroid知识程序员
如何使用web链接跳转App并携带数据

如何使用web链接跳转App并携带数据

作者: 897dc7b51c3c | 来源:发表于2018-03-22 11:38 被阅读50次

在游戏中,往往有这样的需求:给你一个网页,让你从这个网页跳转到游戏中,并且进入指定的游戏房间。

那么通俗的讲就是:HTML唤起应用,打开并携带数据,若未唤醒成功,则开始应用的下载。

方案思路:html使用scheme协议调起App,再交由app对url的携带数据进行处理。


关于scheme

关于scheme url,网上有很多解释,这里就不再复述了。

总结就是:浏览器端或App端点开url的一瞬间,若协议符合app设置好的scheme规则,则会被app捕获并拉起。

例如:我们平常所浏览的网页,是以http://或https://为开头。这个时候,浏览器会判定这是一个网页,从而下载网页内容并打开。而如果是简书这样的app则会以jianshu://为开头,浏览器不知道你的协议,就会去判断你本地是不是安装了这个程序,如果安装了,则调动app。


实现方式

安卓:

首先在你需要跳转的Activity添加scheme规则,方式便是在manifest清单文件中加入下面的代码。


<intent-filter>

            <action android:name="android.intent.action.VIEW"/>

            <category android:name="android.intent.category.DEFAULT" />

            <category android:name="android.intent.category.BROWSABLE" />

            <data android:scheme="jianshu" android:host="index" android:pathPrefix="/openwith"/>

</intent-filter>

那么url的拼接就是jianshu://index/openwith?userId=xxxx

其中,openwith后就是熟悉的html明文传输数据了。ok,到这里已经能够跳转了,那么我们在安卓中要如何获取携带数据呢?

其实,在Activity生命周期中,有两个方法,一个是onCreate,另一个是onNewIntent。onCreate能够实现app从未打开的方式获取携带的数据;而onNewIntent则是实现当app已经打开并且该activity已经在顶栈运行无法再走onCreate生命周期时获取跳转时携带的数据。那么这两个生命周期都需要用到,那么可以写一个方法来进行获取


private void initJumpData(Intent intent) {

        Uri uri = intent.getData();

        if (uri != null) {

            userId = uri.getQueryParameter("userId");

            intent.setData(null);

        }

}

这个时候只要在onCreate和onNewIntent中调用即可

onNewIntent中:initJumpData(intent)

onCreate中:initJumpData(getIntent())

IOS

ios的scheme设置就比较简单了,在info.plist找到URL Types然后点击+号新增一个scheme协议即可,其他参数都不用填

image

这个时候就能够跳转了,而他的url拼接为jianshu://userId=xxxx(可以看到//后面直接就是携带参数了)

那么在IOS中要如何获取携带数据呢?

这里我写得比较复杂,应该是有其他方式的。

在AppController中找到如下两个方法

  • (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

  • (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

如果没有,可以创建

这里的url就是url拼接的全部内容jianshu://userId=xxxx

但是我需要把它转为一个字典类型,这里我提供一个自己的思路:

首先将jianshu://这个前缀去掉,只取后面的数据

NSString *reqer = [url.resourceSpecifier substringFromIndex:2];

拿到之后将其变成json可以解析的字符串


NSArray *arr = [reqer componentsSeparatedByString:@"&"];

NSMutableString *jsonStr = [[NSMutableString alloc]initWithString:@"{"];

for (int i = 0; i < arr.count; i++) {

        NSString *subStr = arr[i];

        NSArray *subArr = [subStr componentsSeparatedByString:@"="];

        if (i == arr.count-1) {

            [jsonStr appendFormat:@"\"%@\":\"%@\"}",subArr.firstObject, subArr.lastObject];

        }else {

            [jsonStr appendFormat:@"\"%@\":\"%@\",",subArr.firstObject, subArr.lastObject];

        }

}

其中,jsonStr就是json格式的字符串了{"userId":1234},下面你们应该知道怎么做了

HTML

html就比较简单了,你们可以直接跳转到我的网页,按F12审查元素即可。

青田放冲麻将,等你来战!<-点它点它

相关文章

网友评论

    本文标题:如何使用web链接跳转App并携带数据

    本文链接:https://www.haomeiwen.com/subject/xkfaqftx.html