原创文章,转载请注明

开发中遇到这么一个问题,就是动态地指定联接服务器地址,或其它数据。如果是其它数据还好说一些,可以通过在服务器上获得的方式来弄。但如果服务器地址都需要动态指定的话。那就得另想办法了. 整个过程得到同事梅俊不少的帮助,这里表示感谢。

自定义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应用并传参的更多相关文章

  1. 微信打开网址添加在浏览器中打开提示 http://caibaojian.com/weixin-tip.html

    原文链接:http://caibaojian.com/weixin-tip.html#t2 使用微信打开网址时,无法在微信内打开常用下载软件,手机APP等.网上流传的各种微信打开下载链接,微信已更新基 ...

  2. [置顶] 如何在浏览器中打开PDF文件并实现预览的思路与代码

    编写项目遇到一个需要在浏览器中打开PDF文件的问题.最终实现效果如下: 其实也就是简单的在浏览器中实现一个打开pdf文件,并有类似预览功能的边框. 其实在网上经常见到类似的页面,在浏览器中打开pdf文 ...

  3. web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开

    https://blog.csdn.net/zgsdzczh/article/details/79744838 web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开   <style typ ...

  4. 微信下载app需要点击右上角在浏览器中打开下载的问题

    很多朋友是不是遇到过这样的问题,自家的app通过微信推广没办法直接下载,而是需要通过一个遮罩层来提示用户下载. 点击下载按钮提示点击右上角在浏览器中打开 这样的方式下载一个app是不是需要点击下载按钮 ...

  5. SharePoint 2013在浏览器中打开pdf文档

    在没有安装Office Web Apps的情况下,SharePoint 2013是支持在IE上直接打开pdf和Excel文档的(只能查看,不能编辑,部分Excel会报错). 当然,需要现在管理中心做一 ...

  6. js判断是否是在微信浏览器中打开

    // js判断是否是在微信浏览器中打开 function is_weixn(){ var ua = navigator.userAgent.toLowerCase(); if(ua.match(/Mi ...

  7. MVC自定定义扩展点之ActionNameSelectorAttribute+ActionFilterAttribute 在浏览器中打开pdf文档

    仅仅演示 了ASP.MVC 5 下为了在在浏览器中打开pdf文档的实现方式之一,借此理解下自定义ActionNameSelectorAttribute+ActionFilterAttribute 类的 ...

  8. vue-cli项目中使用全局过滤器及传参(日期格式化)

    // 过滤日期格式,传入时间戳,根据参数返回不同格式 const formatTimer = function(val, hours) { if (val) { ); var y = dateTime ...

  9. iOS中通过链接地址打开指定APP并传参 by徐文棋

    基于项目需要,有时候需要通过一个链接,或者二维码扫描来直接打开我们所开发的客户端. 当然了.客户端也不仅仅是需要被打开,而且还要跳到相应的页面去,因此这里需要传参. 客户端想用链接打开,必须要在inf ...

随机推荐

  1. IOS平台设计规范

    一.UI的控件概述: 1.框架UI的元素分为4类: A:栏:状态栏目和导航栏的结合体; B:内容视图:应用显示的内容信息,包括相关的交互行为,例如滚屏.插入.删除等操作进行排序; C:控制元素:产品行 ...

  2. c# webbrowser获取滚动条最大值

    int HeightMax = 0; int WidthMax =0; HeightMax = webBrowser1.Document.Body.ScrollRectangle.Height-web ...

  3. hadoop2.6.0 --- 64位源代码

    今天有朋友在群里找hadoop最新的2.6.0的源代码,其实这个源代码在hadoop的官方网站是有下载的(应该是32位的),还有一个src,不过给的是maven版本,需要自己在机器上编译一下(我的机器 ...

  4. 深入理解PHP Opcode缓存原理

    什么是opcode缓存? 当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode).Opcode cache的目地是避免重复编译,减少 ...

  5. ms-class的进化

    ms-class是avalon用得最多的几个绑定之一,也正因为如此其功能一直在扩充中.根据时期的不同,分为旧风格与新风格两种. 旧风格是指正在ms-class后面跟着类外,然后在绑定值中添加表达式,即 ...

  6. <filter-mapping> 的 <dispatcher> 的作用

    The dispatcher has four legal values: FORWARD, REQUEST, INCLUDE, and ERROR. A value of FORWARD means ...

  7. CF 86D Powerful array 【分块算法,n*sqrt(n)】

    给定一个数列:A1, A2,……,An,定义Ks为区间(l,r)中s出现的次数. t个查询,每个查询l,r,对区间内所有a[i],求sigma(K^2*a[i]) 离线+分块 将n个数分成sqrt(n ...

  8. easyui combobox筛选(拼音)

    1.combobox本身的筛选 $('#cc').combobox({ filter: function(q, row){ var opts = $(this).combobox('options') ...

  9. Maven仓库的布局

    任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径,这便是Maven的仓库布局方式.例如log4j:log4j:1.2.15这一依赖,其对应的仓库路径为log4j/log4j/ ...

  10. BOM(制造数据管理)

    --工艺路线 DECLARE -- API input variables l_operation_tbl bom_rtg_pub.operation_tbl_type := bom_rtg_pub. ...