android 外部调起要注意的地方——是否需要控制访问host
2016-06-23 17:57
435 查看
1.外部调起的实现方式
外部调起通常我们需要再某个activity上配置相应的data参数即可实现外部调起。
第一,在AndroidManifest.xml中对<activity />标签增加<intent-filter />,如下:
第二,在SchemeActivity中接收并处理Uri请求,实现跳转到不同的Native App页面,获取Uri可以在Activity中通过getIntent().getData()实现,Demo:
第三,在WebApp页面上,通过如下方式使用:
上面的链接看起来和平时看到的链接是不一样的,myscheme:// 这个协议是被注册到android app中的,整个格式都是我们自定义的,当然,也可以改成任意的样子,比如:com.myscheme://a/b/c 。只不过,这个Uri的格式需要提前定义好,要不然在SchemeActivity中无法匹配上。在SchemeActivity中,可以获取到这个Uri,并分段解析,进而启动不同的Activity,实现从WebApp中跳转到Native App的不同页面。
当然,还有一种方法,是通过注册service,并通过ServerSocketChannel去bind一个端口,比如9999,启动该service后,即可在WebApp中通过 http://127.0.0.1:9999 进行访问,当然,根据service的不同实现,可以在后面加一定的path和query,比如:http://127.0.0.1:9999/dealIntent?intent=....&callback=.... 。这种方式比scheme更灵活,但缺点也是很明显的:service长期处于启动状态,耗电是必须要考虑的。
2.如果唤起后加载的是传过来的url,那么此时要注意做下控制了
比如我们的url是myscheme://myhost/open?url=http://www.baidu.com,如果url被第三方换成了他们的url,那么外部唤起有可能访问的就是别人的页面了。所以如果有这种需求的话,要做过滤处理,对url做把控
外部调起通常我们需要再某个activity上配置相应的data参数即可实现外部调起。
第一,在AndroidManifest.xml中对<activity />标签增加<intent-filter />,如下:
当然,还有一种方法,是通过注册service,并通过ServerSocketChannel去bind一个端口,比如9999,启动该service后,即可在WebApp中通过 http://127.0.0.1:9999 进行访问,当然,根据service的不同实现,可以在后面加一定的path和query,比如:http://127.0.0.1:9999/dealIntent?intent=....&callback=.... 。这种方式比scheme更灵活,但缺点也是很明显的:service长期处于启动状态,耗电是必须要考虑的。
2.如果唤起后加载的是传过来的url,那么此时要注意做下控制了
比如我们的url是myscheme://myhost/open?url=http://www.baidu.com,如果url被第三方换成了他们的url,那么外部唤起有可能访问的就是别人的页面了。所以如果有这种需求的话,要做过滤处理,对url做把控
相关文章推荐
- android屏幕适配
- Android Fragment中startActivityForResult不执行回调。
- 关于Android中内存优化的一些方法
- android保存数据到本地 SharedPreferences
- 因为ndk路径错误的android打包报错
- cordova android (一)
- android -解压和压缩zip
- Android工具类系列-ScreenUtil
- Android自定义DataTimePicker(日期选择器)
- 安卓学习笔记—LisetView的下拉刷新
- 给 Android 开发者的 RxJava 详解
- android中控件点击两次才响应onclick方法
- Picasso Android图片第三方框架的使用
- 排名前100的Android开源库
- 在Android环境中使用Valgrind工具进行内存错误检测
- Android CardView 开发过程中要注意的细节
- Android热修复实现
- android 上传文件到服务器代码实例
- android 代码混淆
- Android Binder ProcessState & IPCThreadState相关介绍