浏览器中打开IOS应用并传参
原创文章,转载请注明
开发中遇到这么一个问题,就是动态地指定联接服务器地址,或其它数据。如果是其它数据还好说一些,可以通过在服务器上获得的方式来弄。但如果服务器地址都需要动态指定的话。那就得另想办法了. 整个过程得到同事梅俊不少的帮助,这里表示感谢。
自定义URL_Scheme 是一个不错的解决方案。需要注意的是:在多个应用程序注册了同一种URL Scheme 的时候,iOS 系统程序的优先级高于第三方开发程序。但是如果一种URL Scheme 的注册应用程序都是第三方开发的,那么这些程序的优先级关系是不确定的。
使用URL_Scheme,具体分两步
一,、如何在浏览器中打开本地应用
在Info.plist中插入相关项,在XCode里它看起来像
用文本编辑器打开,它看起来像
到这里, 就可以用浏览器把它打开了。
在地址栏输入 ProductID://com.terrence.ProductID 回车,就弹出是否打开本地应用的对话框
OK
二、如何传递参数
通过第一步,可以打开应用了,但还没有解决传递参数的问题,想得到传递的参数,就要在应用的代码里做相应的回调处理,这里的项目是cocos2d-x的框架,以此为例说一下具体的步骤:
1.实现一下 UIApplicationDelegate中的一个回调方法
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url; // Will be deprecated at some point, please replace with application:openURL:sourceApplication:annotation:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation NS_AVAILABLE_IOS(4_2); // no equiv. notification. return NO if the application can't open for some reason
看官方注释,第一个已经过期了,咱们实现第二个。
在cocos2d-x里 AppController 这个类实现了UIApplicationDelegate协议,所以在这个类里增加
//>=-Rct-=< for URL_Scheme
// no equiv. notification. return NO if the application can't open for some reason
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation NS_AVAILABLE_IOS(4_2){
//std::string l_strURL = [[url absoluteString] UTF8String];
std::string l_strURL = [[url query] UTF8String];
std::string l_strSourceApplication = [sourceApplication UTF8String];
cocos2d::CCApplication::sharedApplication()->applicationUrlScheme(l_strURL, l_strSourceApplication);
return YES;
}
这里稍稍说明一下, [url query] 返回的url中 "?"后面的部分
http://blog.csdn.net/ysy441088327/article/details/7416759 这篇博客很直观地说明了NSUrl的常见用法,这里引用一下。
applicationUrlScheme方法是自定义的,它应当在CCApplicationProtocol 里被声明(成纯虚函数),然后在AppDelegate里真正实现它。
//url scheme
void AppDelegate::applicationUrlScheme(const std::string& p_strUrl, const std::string& p_strSourceApplication){
CCLog("applicationUrlScheme url:%s, sourceApplication:%s", p_strUrl.c_str(), p_strSourceApplication.c_str());
CheatMgr::sharedMgr()->setUrlScheme(p_strUrl);
}
到现在为止,在浏览器中输入 ProductID://com.terrence.ProductID?http://192.168.0.100:8080/gamedata
应用就被唤醒,且得到传递过来的参数
浏览器中打开IOS应用并传参的更多相关文章
- 微信打开网址添加在浏览器中打开提示 http://caibaojian.com/weixin-tip.html
原文链接:http://caibaojian.com/weixin-tip.html#t2 使用微信打开网址时,无法在微信内打开常用下载软件,手机APP等.网上流传的各种微信打开下载链接,微信已更新基 ...
- [置顶] 如何在浏览器中打开PDF文件并实现预览的思路与代码
编写项目遇到一个需要在浏览器中打开PDF文件的问题.最终实现效果如下: 其实也就是简单的在浏览器中实现一个打开pdf文件,并有类似预览功能的边框. 其实在网上经常见到类似的页面,在浏览器中打开pdf文 ...
- web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开
https://blog.csdn.net/zgsdzczh/article/details/79744838 web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开 <style typ ...
- 微信下载app需要点击右上角在浏览器中打开下载的问题
很多朋友是不是遇到过这样的问题,自家的app通过微信推广没办法直接下载,而是需要通过一个遮罩层来提示用户下载. 点击下载按钮提示点击右上角在浏览器中打开 这样的方式下载一个app是不是需要点击下载按钮 ...
- SharePoint 2013在浏览器中打开pdf文档
在没有安装Office Web Apps的情况下,SharePoint 2013是支持在IE上直接打开pdf和Excel文档的(只能查看,不能编辑,部分Excel会报错). 当然,需要现在管理中心做一 ...
- js判断是否是在微信浏览器中打开
// js判断是否是在微信浏览器中打开 function is_weixn(){ var ua = navigator.userAgent.toLowerCase(); if(ua.match(/Mi ...
- MVC自定定义扩展点之ActionNameSelectorAttribute+ActionFilterAttribute 在浏览器中打开pdf文档
仅仅演示 了ASP.MVC 5 下为了在在浏览器中打开pdf文档的实现方式之一,借此理解下自定义ActionNameSelectorAttribute+ActionFilterAttribute 类的 ...
- vue-cli项目中使用全局过滤器及传参(日期格式化)
// 过滤日期格式,传入时间戳,根据参数返回不同格式 const formatTimer = function(val, hours) { if (val) { ); var y = dateTime ...
- iOS中通过链接地址打开指定APP并传参 by徐文棋
基于项目需要,有时候需要通过一个链接,或者二维码扫描来直接打开我们所开发的客户端. 当然了.客户端也不仅仅是需要被打开,而且还要跳到相应的页面去,因此这里需要传参. 客户端想用链接打开,必须要在inf ...
随机推荐
- <转>揭秘DNS后台文件:DNS系列之五
揭秘DNS后台文件 在前面的博文中我们介绍了DNS的体系结构,常用记录,还介绍了辅助服务器的配置,今天我们来介绍一下DNS服务器背后的几个文件.其实DNS服务器的工作完全依靠这几个文件,了解了DNS的 ...
- JavaScript 教程学习进度备忘(二)
备忘:之前,只将“JS 教程”学习完毕,这篇记录:“JS HTML DOM ”.“JS 对象”.“JS Window”.“JS 库” 书签:跳过:另外跳过的内容有待跟进 _______________ ...
- python中隐式的内存共享
在python中,基本上使用的是引用,那么就会造成一个隐式的内存共享,特别是在容器对象中,例如list,dictionary 对于不可变对象,是不会造成隐式的内存共享情况,如下所示: >> ...
- scala 连接 mysql
code: import java.sql.{ResultSet, DriverManager} import com.mysql.jdbc.Connection object hoursAvg { ...
- bat面试总结
bat是国内互联网行业的龙头老大,招聘要求自然也是互联网行业最高-面试过程一般考查四个方面:基础+算法+数据结构+项目. 基础:c/c++/java等语言基础,这个根据你应聘所选的语言来定(一般不会考 ...
- bzoj3717: [PA2014]Pakowanie
Time Limit: 90 Sec Memory Limit: 256 MBSubmit: 128 Solved: 43[Submit][Status][Discuss]Description 你有 ...
- 20150926kaggle Titanic入门篇excel&python
1 excel数据透视表 这里主要是讲述了一下插入里面的数据透视表常用功能,数据透视表十分方便,比直接筛选还要简单,看数据很直观,这里大力推荐. 2 python&pandas 这里主要是讲述 ...
- SCAU 10678 神奇的异或
10678 神奇的异或 时间限制:1000MS 内存限制:65535K 题型: 编程题 语言: 无限制 Description 在现在这个信息时代,数据是很重要的东西哦~ 很多时候,一条关键的数 ...
- incompatible
- 深入.Net字符串类型
.Net的字符串其实还是有很多东西可以写的.但是最近在学习SQL Server,只好先做下最近学习到的一些巧用,妙用之类的东西. 巧用String.Join拼接字串数组,字符串集合为字符串.如果在之前 ...