2015-09-18 10:20:54 liaozhongping 阅读数 1572


ios点击网页页面判断是否安装app并打开,否则跳转app store的方法:

常常有这样的场景,咱们开发出来的APP需要进行推广,比如在页面顶部来一张大Banner图片,亦或一张二维码。但往往我们都是直接给推广图片加了一个下载链接(App Store中的)。所以咱们来模拟一下用户的操作步骤:

1、用户第一次访问宣传页面

   a、点击Banner,进入到APP Store中对应的APP下载页

   b、APP下载页中提示:安装;用户点击安装

   c、安装完成后,APP下载页中提示:打开;用户继续点击打开

   d、用户正常使用APP

2、用户第二次访问宣传页面

   a、点击Banner,进入到APP Store中对应的APP下载页

   b、APP下载页中提示:打开;用户直接点击打开

   c、用户正常使用APP

3、用户第三次、第四次、...、第N次访问,操作步骤同2

能看出来,不管是点击Banner还是扫描二维码的方式,对于已经安装过APP的用户来说,这个体验都是非常糟糕的。

更优的体验是:点击Banner(或扫描二维码)后,程序判断当前系统是否已安装App,如果未安装,则自动跳转到App Store下载页;否则直接打开App。

在iOS上,要增加一个APP的大Banner,其实只需要在<head>标签内增加一个<meta>标签即可,格式如:

<meta name='apple-itunes-app' content='app-id=你的APP-ID'>

比如加一个百度贴吧的Native APP大Banner,用下面这串儿代码:

[html] view plaincopy在CODE上查看代码片派生到我的代码片

<meta name='apple-itunes-app' content='app-id=477927812'>  

而对于点击链接后,能否直接打开,可以通过下面的代码来实现。前提条件:你得知道你的APP对应的打开协议,如贴吧APP,协议为:com.baidu.tieba:// ,微信的:weixin:// ,and so on。。。

<!-- a标签的链接,设置为对应的下载链接;点击打开的动作,在click事件中注册 -->  

<a href="https://itunes.apple.com/cn/app/id892359007" id="openApp">贴吧客户端</a>  

<script type="text/javascript">  

    document.getElementById('openApp').onclick = function(e){  

        // 通过iframe的方式试图打开APP,如果能正常打开,会直接切换到APP,并自动阻止a标签的默认行为  

        // 否则打开a标签的href链接  

        var ifr = document.createElement('iframe');  

        ifr.src = 'laoshi://';  

        ifr.style.display = 'none';  

        document.body.appendChild(ifr);  

        window.setTimeout(function(){  

            document.body.removeChild(ifr);  

        },3000)  

    };  

</script>  



 
2014-12-04 15:45:55 aijiami0 阅读数 1717

        【iOS app加密】iOS app之游戏加密防破解。iOS app游戏类应用有一个很泛滥但被视为鸡肋的问题,那就是iOS app被破解的问题。因为国内大多数游戏靠内购和广告盈利,游戏安装包也只是在早期象征性的收费,之后就会免费,所以很多开发者对iOS app游戏从只能在购买者设备安装变成可免费到处安装并不关注。

         App游戏被破解攻击可能是宿命,正所谓,哪里有游戏,哪里就有黑客,哪里就有破解。iOS app游戏没有加密而被破解的问题,其实不仅仅是iOS上,几乎所有平台上,无论是pc还是移动终端,都是顽疾。可能在中国这块神奇的国度,大家都习惯用盗版了,并不觉得这是个问题,iOS app游戏开发者被破解也是麻木了。甚至某些盈利性质的公司也这么想,并且还有些平台网站把盗版软件当成噱头,义正言辞地去宣传用盗版是白富美,买正版是傻X。其实iOS app没有加密被破解的问题,并不起源于中国。所以,广大iOS app游戏开发者还是需要了解如何保护iOS app加密防破解的技术。下面就来研究下iOS app之游戏加密防破解。

         1、事后检测

        在iOS app加密防破解方面,可以做事后检测,使得破解IPA无法正常运行以达到防御作用。

        而该如何做事后检测呢,最直接的检测方法是将破解前后文件系统的变化作为特征值来检测。通过分析PoedCrackMod源码,会发现根据破解前后文件时间戳的变化,或文件内容的变化为特征来判断是不可靠的,因为这些特征都可以伪造。

         2、函数名加密

         iOS app加密防破解,为0便是破解版。当检测出破解版本时注意,为了避免逆向去除检测函数,需要多处做检测。同时检测函数要做加密处理,例如iOS app函数名加密,并要在多处进行检测。

         iOS app破解所用的工具和方法都必须运行在越狱机上,因此将安全问题托付给苹果,幻想他可以将iOS系统做得无法越狱,他提供的一切安全措施都能生效(例如安全沙箱,代码签名,加密,ASLR,non executable memory,stack smashing protection)。这是不可能的,漏洞挖掘大牛门也不吃吃素的,所以自己的iOS app还是由自己来加密守护。

        具体方法如下

        1.URL编码加密

        对iOS app中出现的URL进行编码加密,防止URL被静态分析

        2.本地数据加密

        对NSUserDefaults,sqlite存储文件数据加密,保护iOS app的帐号和关键信息。

        3.网络传输数据加密

        对iOS app客户端传输数据提供加密方案,有效防止通过网络接口的拦截获取

        4.方法体,方法名高级混淆

        对iOS app的方法名和方法体进行混淆,保证源码被逆向后无法解析代码

        5.程序结构混排加密

        对iOS app逻辑结构进行打乱混排,保证源码可读性降到最低

       目前有这一iOS app加密保护技术的是移动应用安全保护第三方平台爱加密。

 

2019-06-06 17:43:37 weixin_44926736 阅读数 645

网页唤起app,并传值到app ios篇

安卓篇上有相对完整的html代码和lua代码,此处着重写OC底层相关的代码,安卓篇路径点击这里
准备工作是需要在html网页中添加主动拉取app的相关代码

//触发点击事件
$('#add').click(function() {
		opens()
	})
	
function opens(){
	if((isAndroid&&isWeixin)){
	    $('#isphone').html("在浏览器中打开");
	 }else{
		if(!hasApp){
		//同样没检测到app,去下载          
        	window.location='你的app链接';
       	}else{
       		if((isiOS&&isWeixin)) {
				//微信中添加遮罩层
				$('#isphone').html("在safari中打开");
			}else if(!isWeixin&&!isAndroid){
				console.log('isiOS');
				window.location='userapp://user.app/openwith?roomid='+roomid+‘&type=’+type;
			}
	    }
	 }
}

  1. 在plist文件中,增加URL types,将相应的host和scheme填进去(和android一样,此处的host和scheme是网页拉起app的关键,一定不能填错)
    在这里插入图片描述
    1. 在AppController.mm文件中,获取从url拿到的参数
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    if(!url){
        return NO;
    };
    NSString * urlString=[url absoluteString];
    //NSLog(@"urlString = %@",urlString);
    NSLog(@"type shareurl = %@",urlString);
    NSRange range = [urlString rangeOfString:@"roomid="];
    NSRange gametype = [urlString rangeOfString:@"type="];
    
    if(gametype.location!= NSNotFound ){
        NSString *parametersString = [urlString substringFromIndex:gametype.location + 5];
        gametype = [parametersString rangeOfString:@"="];
        if(gametype.location == NSNotFound){
            NSLog(@"type parametersString = %@",parametersString);
            [[NSUserDefaults standardUserDefaults] setObject:parametersString forKey:@"IOSOpenUrlGameType"];
            [[NSUserDefaults standardUserDefaults] synchronize];
            //return YES;
        }
    }
    NSLog(@"rparametersString = text----------");
    if(range.location!= NSNotFound){
        NSLog(@"range.location!= NSNotFound");
        NSString *parametersString = [urlString substringFromIndex:range.location + 7];
        range = [parametersString rangeOfString:@"&"];
        NSLog(@"rparametersStrin1 = %@",parametersString);
        if(range.location != NSNotFound){
            NSLog(@"rparametersString2 = %@",parametersString);
            parametersString = [parametersString substringToIndex:range.location];
            NSLog(@"room parametersString3 = %@",parametersString);
            [[NSUserDefaults standardUserDefaults] setObject:parametersString forKey:@"IOSOpenUrlRoomID"];
            [[NSUserDefaults standardUserDefaults] synchronize];
            return YES;
        }
    }
    return [self application:application handleOpenURL:url];
}
  1. 在lua代码中去调用OC拿到的值
    在这里插入图片描述
    这样就拿到所需要的参数了,通过获取到的参数就可以去做其他事情了。
2016-05-20 14:38:49 zhoushuangjian511 阅读数 12535

前言:

        随着App的开发,花样也越来越多了。现如今,是一个商家猖獗的时代,处处都是他们投放的广告。广泛的推广他们的产品或者服务,他们就在网上投放大量的网页,其中网页里面有一些特殊或者炫彩的按钮,或者文字。当浏览用户点击他们,他们就会进入这个商家的App里面,打开商家指定的页面。如果没有安装商家的App.他们提示您,去相应的位置下载他们的App。那么如何从网页调起您的App呢?

第一步:配置您的App。

1、我们要到您的App。(我找的App如下)

2、打开 看美App的开发项目的 info.plist 页面,并按图设置。(如下:图)



第二:我们编写 HTML 网页模拟商家网页。

1、网页内容代码

<!DOCTYPE html>
<html>
<head>
	<title>IOS 通过浏览器打开App(看美)</title>
	<meta charset="utf-8">
	<style type="text/css">
		.back{
			position:absolute; top:50px;left:360px;float:left;

		}
	</style>
</head>
<body>
    <div class="back">
    <p>
        <font size="20px">
    	白日依山尽<br>
    	黄河入海流<br>
    	<a href="KanMeiApp://kanmei.zsj.com" >打开看美APP</a><br>
    	生活多回味<br>
    	</font>
    </p>
    </div>
</body>
</html>

效果:



第三:找到您写的HTML文件。(我的如下)


找到后,打开你的手机。这里我们使用模拟器替代。


打开,模拟器里面的浏览器(safari),并把您写的HTML 直接拖入进去。结果如下图:

第四:提示

1、如果你的模拟器里面没有安装(看美)App。这浏览器将打开失败。并提示如下:

        

2、我们就去安装我们的app(看美)

并双击,Home键,确保,我们要启动的App。处于关闭状态。


第六:您现在就可以,回到网页,点击蓝色字体(打开看美App),会有下面提示。


我们点击Open,就可以启动我们的App了。


看图片的头部还有  back to safari 的字体。可能有的小伙班会说,这是一个网页什么的。那我么在双击home键。查看,后台开启的项目。




2019-08-13 19:56:02 qq_38520096 阅读数 159


Url Scheme


Url Scheme(url 协议),顾名思义就是用于提供一个对外协议,用于第三方app或者网页唤起该应用。不同的app应该拥有不同的Scheme,避免与一些应用较为广泛的app使用相同的Scheme。通过Url Scheme不仅可以唤起应用,还能够在唤起时传递参数。


ios Url Scheme配置


1.选中项目,点击Info,打开URL Types。

Url Scheme配置


2.添加一条Url Scheme

一个app可以同时拥有多个Scheme协议
Identifier:标示符可以和项目标示符相同,也可以随意填写
URL Scheme:这就是我们请求的协议
添加Url Scheme
做好上面这一步后,xcode会自动在Info.plist中给你添加以下参数,你也可以直接在Info.plist中添加Url Scheme。
Info.plist


3.捕获第三方唤起请求

(1)在AppDelegate中添加以下方法

// 已废弃(适配),NS_DEPRECATED_IOS(4_2, 9_0)
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    return YES;
}
 
// 新方法,NS_AVAILABLE_IOS(9_0);
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
     
}

(2)实现-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options方法并解析传递的参数

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
    NSString *urlStr = url.absoluteString;
    BOOL ret = [urlStr hasPrefix:@"TestApp://test"];
    if(ret){
    	//打印参数
        NSLog(@"url query:%@",[url query]);
        //将参数转换为字典
        NSArray *paramsArray = [[url query] componentsSeparatedByString:@"&"];
        NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
        for(NSString *param in paramsArray){
            NSArray *curParams = [param componentsSeparatedByString:@"="];
            [params setValue:[curParams lastObject] forKey:[curParams firstObject]]; 
        }
        NSLog(@"url scheme params:%@",params);
    }
    return ret;
}

(3)在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中判断是否是第三方唤起app

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    if(launchOptions[UIApplicationLaunchOptionsURLKey] != nil){
        //第三方应用打开该app
    }else{
       //自己启动app
    }
    return YES;
}

4.通过网页唤起app

传递参数的方式参考http GET请求
(1)使用html页面来跳转

<html>
 
    <head>
 
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
        <title>Insert title here</title>
 
    </head>
 
    <body>
 
        <a href="TestApp://test?a=100&b=99&c=88">open app</a><br/>
 
    </body>
 
</html>

(2)在Safari中直接输入TestApp://test(Url Scheme)也可以直接唤起app


5.通过openUrl开启系统app

//打开系统设置:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=LOCATION_SERVICES"]];  
//打开蓝牙:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General&path=Bluetooth"]]; 
//打开TWitter:   
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=TWITTER"]]; 
//调用 自带mail
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://admin@hzlzh.com"]];
//调用 电话phone
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://8008808888"]];
//调用 SMS
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://800888"]];
//调用自带 浏览器 safari
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.hzlzh.com"]];

6.Url Scheme白名单

<key>LSApplicationQueriesSchemes</key>
 <array>
    <!-- 微信 URL Scheme 白名单-->
    <string>wechat</string>
    <string>weixin</string>
 
    <!-- 新浪微博 URL Scheme 白名单-->
    <string>sinaweibohd</string>
    <string>sinaweibo</string>
    <string>sinaweibosso</string>
    <string>weibosdk</string>
    <string>weibosdk2.5</string>
 
    <!-- QQ、Qzone URL Scheme 白名单-->
    <string>mqqapi</string>
    <string>mqq</string>
    <string>mqqOpensdkSSoLogin</string>
    <string>mqqconnect</string>
    <string>mqqopensdkdataline</string>
    <string>mqqopensdkgrouptribeshare</string>
    <string>mqqopensdkfriend</string>
    <string>mqqopensdkapi</string>
    <string>mqqopensdkapiV2</string>
    <string>mqqopensdkapiV3</string>
    <string>mqzoneopensdk</string>
    <string>wtloginmqq</string>
    <string>wtloginmqq2</string>
    <string>mqqwpa</string>
    <string>mqzone</string>
    <string>mqzonev2</string>
    <string>mqzoneshare</string>
    <string>wtloginqzone</string>
    <string>mqzonewx</string>
    <string>mqzoneopensdkapiV2</string>
    <string>mqzoneopensdkapi19</string>
    <string>mqzoneopensdkapi</string>
    <string>mqzoneopensdk</string>
 
    <!-- 支付宝  URL Scheme 白名单-->
    <string>alipay</string>
    <string>alipayshare</string>
 
</array>

Mac URL拉起

mac Url scheme前面的配置和iOS一样这里就不在重复

- (void) handleUrlEvent:(NSAppleEventDescriptor*)theEvent withReplyEvent:(NSAppleEventDescriptor*)replyEvent{
    NSString *url = [[theEvent paramDescriptorForKeyword:keyDirectObject] stringValue];
    if([url hasPrefix:@"test://bind"]){
     	//处理Scheme
    }
}

只做以上处理还是无法handle所有scheme,我们还需要添加以下代码

- (void)applicationWillFinishLaunching:(NSNotification *)notification{
    [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleUrlEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
}
没有更多推荐了,返回首页