浏览器中打开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 ...
随机推荐
- C# 保留2位小数
1.只要求保留N位不四舍5入 float f = 0.55555f; int i =(int)(f * 100); ...
- Python 用 os.walk 遍历目录
今天第一次进行 文件遍历,自己递归写的时候还调试了好久,(主要因为分隔符号的问题),后来发现了os.walk方法,就忍不住和大家分享下. 先看下代码: import os for i in os.wa ...
- 闭包在python中的应用,translate和maketrans方法详解
python对字符串的处理是比较高效的,方法很多.maketrans和translate两个方法被应用的很多,但是具体怎么用常常想不起来. 让我们先回顾下这两个方法吧: 1.s.translate(t ...
- Sunrise Release Version History
Sunrise Release Version History 1.4.1.0 1.1.0.0 1.0.1.0
- Http状态码的种类及含义
1xx 临时响应:2xx 成功:3xx 重定向: 4xx 请求错误: 5xx 服务器错误: http://www.hostspaces.net/wenzhang-detail.php?id=198 常 ...
- ZOJ-3686 A Simple Tree Problem 线段树
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3686 题意:给定一颗有根树,每个节点有0和1两种值.有两种操作: ...
- cocos2d-x使用python创建vs模板
cocos2d-x 2.2推荐使用create_project.py创建工程,所有的平台都可以通过这个python文件创建工程.这个文件位置在源码cocos2d-x-2.2.2\tools\proje ...
- http://blogs.msdn.com/b/pranavwagh/archive/2007/03/03/word-2007-file-seems-to-be-deleted-when-you-open-and-save-it-using-dsoframer.aspx
http://blogs.msdn.com/b/pranavwagh/archive/2007/03/03/word-2007-file-seems-to-be-deleted-when-you-op ...
- HD2046骨牌铺方格
骨牌铺方格 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- JS、OnClientClick、OnClick
OnClientClick是客户端事件处理方法,一般采用JavaScript来进行处理,也就是直接在浏览器端运行,一点击就运行: OnClick是服务器端事件处理方法,在服务器端也就是IIS中运行,点 ...