召唤大神@Jare,字数补丁
我还想问你怎么用 url 启动应用呢…… 这个肯定不同平台的 API 不一样,你应该去查 API 啊……
现在是这样,玩家微信分享之后,点击链接通过url scheme启动app。比如app://test.com/?room=123;然后在AppActivity里面获取传递的房间号参数然后传递到creator里面。我想请问我应该在哪里执行Cocos2dxJavascriptJavaBridge啊?
我翻了翻论坛说不能在onCreate里面,说是这时候游戏引擎还没启动?那我应该在哪里执行呢?onResume?onStart?
我在这2个方法里面测试了好像会报错
我的方法如下:
app.runOnGLThread(new Runnable() { @Override public void run() { Cocos2dxJavascriptJavaBridge.evalString("cc.test=123123"); } });
报错如下:
ccc版本1.61
这个配置 url scheme 就行了
问题是需要在原生代码里获取启动的参数
,现在的问题是 java能获取 到,但是不知道怎么传递到 ccc 的 js 里来
activity 的onCreate ,onResume等各种方法里,Cocos2dxJavascriptJavaBridge都还没加载好,所以想找类似 ios 里的 didFinishLaunchingWithOptions 这种回调,
这样可以调 evalString 写到 localStorage 里
获取参数的时候,先存在java全局里,等游戏启动了再用jsb来获取?
我只是想获取一个参数,集成这个是不是有点杀鸡用牛刀的感觉啊?
楼上的这个做法不行吗
// 微信发送请求到第三方应用时,会回调到该方法
@Override
public void onReq(BaseReq req) {}
这个是否可以想办法?
我现在直接写了个文件,但是 ios 是能直接 localstorage 传的,这样算是多了一部分逻辑,所以如果 能直接用Cocos2dxJavascriptJavaBridge是最好的
String appDir = getApplicationInfo().dataDir + "/files";
try {
String params = this.getStartOptions(getIntent());
if(!params.isEmpty()) {
File optionsFile = new File(appDir, ".startOptions");
FileWriter out = new FileWriter(optionsFile);
out.write(params);
out.close();
}
} catch (Exception e) {
}
为什么要写到文件里,就一个 string,直接存全局变量不行吗
+1,推荐用魔窗,ios和Android都方便
我们这边是这样的:
- 新建一个activity,专门用来处理url启动或者推送启动;
- 在这个activity的onCreate里获取参数,并保存起来;
- 然后再通过这个activity启动游戏activity,并把前面的activity主动finish掉,确保每次通过url启动时都能调到onCreate;
- 游戏里通过代码到Java里去获取参数,获取成功后把Java里保存的参数置为空,这样如果获取到的参数不为空,就是从url启动的游戏了;
PS:两个地方去获取参数,登录成功和后台唤醒
标准上浏览器是可以通过uri启动app并传递参数给app,ios和Android平台都支持。
uri的格式类似这样 appscheme://host/path/?param1=“a”¶m2=“b”
但是,
宇宙第一大平台微信内置的浏览器屏蔽了除应用宝商店以外的所有App链接直接跳转,所以,你会注意到很多分享到微信的链接,点开,提示你去右上角选择浏览器,然后跳到浏览器里,重新点击打开。
比如知乎的做法
然后,后面就是走标准流程,安卓在onCreate(启动阶段调用)和onNewIntent(Uri唤醒阶段调用)去监听Intent是否有可以用的Uri,然后解析出参数数据传给游戏层。param1和param2.。
ios是在openUrl里处理,后面流程就差不多了。反正是标准,最怕的就是自以为是的改标准
当然,还有一个比较麻烦的,你需要写web网页,在web里用各种技巧来判断app是否安装和跳转逻辑,还得测试兼容各种国产第三方手机浏览器,比如华为、小米、魅族手机自带浏览器以及UC、qq等第三方浏览器,至于iOS,苹果还有一个Universal link方案(自行百度吧)也是可以的,不过需要配置和https。
如果没有足够精力去折腾,可以考虑用 魔窗sdk ,他们有整套的设计方案,好用,但接起来要注意的细节比较多。
感谢你的回复!
现在我有一个问题就是我不知道该在什么地方把获取到的param传递到游戏层。还是说只能在获取的时候存在java变量里面,然后等游戏启动了自己来取。而不是获取到的时候直接就把变量设置到游戏里面。
你回复里面的意思是说在onCreate里面获取参数,然后onNewIntent里面去调用evalString 设置到游戏层吗?
1、在COCOS2DX框架的JAVA(或者OC)层(因为不同版本框架JAVA类名不同 这里简称JAVA层)的所有onXXX函数中打印输出函数。
2、在JS层的main()中打印输出一条信息。
3、运行你的游戏 看输出,输出中main()函数输出的信息后一条是哪个onXXX函数输出的你就把信息传递的代码写到哪里。
这个问题楼主解决了吗
你好,关于通过分享链接URL启动应用,怎么接收启动传过来的参数的问题,我现在也卡在这个地方了。不知你后来解决了,怎么解决的,能提供些思路吗?万分感谢~~我的QQ86168741 微信:18971280530
你好,关于通过分享链接URL启动应用,怎么接收启动传过来的参数的问题,我现在也卡在这个地方了。你的这思路我想尝试下,但遇到有问题,可以帮解决下吗?万分感谢~~我的QQ86168741 微信:18971280530

