最近的项目中用到了几个比较不常用的方法:
(1)获取设备的唯一标示,有的应用,如银行、支付、广告等可能需要绑定设备,但是苹果由于种种原因现在已经停止了使用UIDivice的uniqueIdentifier属性,所以只有改用MAC地址。
(2)有些金融类的应用出于安全对已越狱的设备进行友谊提示,所以要判断ios是否越狱。
#import <Foundation/Foundation.h>
@interface UIDevice (Help)
/*
*根据mac地址和设备信息获取设备唯一标示(ios5以后的系统中已经停止使用设备标示uniqueIdentifier)
*/
- (NSString *) uniqueDeviceIdentifier;
/*
*根据mac地址获取设备唯一标示(ios5以后的系统中已经停止使用设备标示uniqueIdentifier)
*/
- (NSString *) uniqueGlobalDeviceIdentifier;
/*
*判断设备是否越狱
*/
- (BOOL)isJailbroken;
@end
#import "UIDevice+Help.h"
#import "NSString+MD5Addition.h"
#include <sys/socket.h>
#include <sys/sysctl.h>
#include <net/if.h>
#include <net/if_dl.h>
@interface UIDevice(Private)
- (NSString *) macaddress;
@end
@implementation UIDevice (Help)
#pragma mark -
#pragma mark Private Methods
/*
*获取MAC地址
*/
- (NSString *) macaddress{
int mib[6];
size_t len;
char *buf;
unsigned char *ptr;
struct if_msghdr *ifm;
struct sockaddr_dl *sdl;
mib[0] = CTL_NET;
mib[1] = AF_ROUTE;
mib[2] = 0;
mib[3] = AF_LINK;
mib[4] = NET_RT_IFLIST;
if ((mib[5] = if_nametoindex("en0")) == 0) {
printf("Error: if_nametoindex error\n");
return NULL;
}
if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {
printf("Error: sysctl, take 1\n");
return NULL;
}
if ((buf = malloc(len)) == NULL) {
printf("Could not allocate memory. error!\n");
return NULL;
}
if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
printf("Error: sysctl, take 2");
free(buf);
return NULL;
}
ifm = (struct if_msghdr *)buf;
sdl = (struct sockaddr_dl *)(ifm + 1);
ptr = (unsigned char *)LLADDR(sdl);
NSString *outstring = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X",
*ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];
free(buf);
return outstring;
}
#pragma mark -
#pragma mark Public Methods
- (NSString *) uniqueDeviceIdentifier{
NSString *macaddress = [[UIDevice currentDevice] macaddress];
NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
NSString *stringToHash = [NSString stringWithFormat:@"%@%@",macaddress,bundleIdentifier];
NSString *uniqueIdentifier = [stringToHash stringFromMD5];
return uniqueIdentifier;
}
- (NSString *) uniqueGlobalDeviceIdentifier{
NSString *macaddress = [[UIDevice currentDevice] macaddress];
NSString *uniqueIdentifier = [macaddress stringFromMD5];
return uniqueIdentifier;
}
- (BOOL)isJailbroken {
BOOL jailbroken = NO;
NSString *cydiaPath = @"/Applications/Cydia.app";
NSString *aptPath = @"/private/var/lib/apt/";
if ([[NSFileManager defaultManager] fileExistsAtPath:cydiaPath]) {
jailbroken = YES;
}
if ([[NSFileManager defaultManager] fileExistsAtPath:aptPath]) {
jailbroken = YES;
}
return jailbroken;
}
@end
MD5加密
#import <Foundation/Foundation.h>
@interface NSString(MD5Addition)
- (NSString *) stringFromMD5;
@end
#import "NSString+MD5Addition.h"
#import <CommonCrypto/CommonDigest.h>
@implementation NSString(MD5Addition)
- (NSString *) stringFromMD5{
if(self == nil || [self length] == 0)
return nil;
const char *value = [self UTF8String];
unsigned char outputBuffer[CC_MD5_DIGEST_LENGTH];
CC_MD5(value, strlen(value), outputBuffer);
NSMutableString *outputString = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for(NSInteger count = 0; count < CC_MD5_DIGEST_LENGTH; count++){
[outputString appendFormat:@"%02x",outputBuffer[count]];
}
return [outputString autorelease];
}
@end
分享到:
相关推荐
android 6.0以后,android获取唯一标示的jar,不受需要判断权限,一个apk产生唯一标示,不受安装卸载影响
一句话获取ios设备唯一标示符,使用VFL语法添加约束 [[UIDevice currentDevice].identifierForVendor UUIDString]
c#代码获取插在电脑上的u盘的生产的唯一标示符号,对识别u盘很有用
iOS 2.0版本以后UIDevice提供一个获取设备唯一标识符的方法uniqueIdentifier,通过该方法我们可以获取设备的序列号,这个也是目前为止唯一可以确认唯一的标示符。好景不长,因为该唯一标识符与手机一一对应,苹果...
这是为了实现iOS获取手机唯一标示实现的工具类,只需下载添加至项目中调用getUUID即可
当我们拿到用户的唯一标识查询地址(参见 获取运营商接口URL 页面)后,直接通过 HTTP 协议访问改地址,即可得到该手机用户在运营商数据库中的唯一标识值,其值
获取用户设备的唯一标识
IOS目前获取 设备唯一id 最可靠的方法!
GUID vb6.0 vb 生成唯一标示,GUID vb6.0 vb 生成唯一标示,
iOS 设备唯一标示符(UDID)解决方案 ZKUDIDManager ,ZKUDIDManager是一个开源的基于Keychain和IDFV的iOS设备唯一标示符(UDID...
Organizationally unique identifier (OUI) “组织唯一标示符”,由签发给各类组织的唯一标识符。 在任何一块网卡(NIC)中烧录的6字节MAC地址中,前3个字节体现了OUI,其表明了NIC的制造组织。通常情况下,该标识符...
写了一个生成唯一标识的字符串工具,前面放上去的时候,有人说有可能出现重复的情况,我觉得重复的几率不是没有,但是几乎完全可以不用考虑,我说一下我的生成思想,大家看看几率会有多大:我的生成方式是: 当前的...
该工具用于获取你想要颜色的各类表示值 包括网页色值 RGB值 16进制表示值 打开软件后鼠标停留的地方就会显示改颜色对应的各类标示值
行业分类-电子-一种新型多功能变电站标示牌
PHP实现判断访问端是手机还是电脑 一、 开发环境 ... 2、文本编辑器:Sublime 3。 二、主要技术 本案例主要使用PHP 7中的HTTP头信息via、浏览器代理标示符来实现判断访问端是手机还是电脑的功能。
这学期在学习编译原理,最近的上机作业就是做一个简单的词法分析器,在做的过程中,突然有个需求就是判断一个字符串是否为合法的标示符,因为我是用python语言做的,做的是Python的词法分析器,于是下面分享以下怎样...
Android SIM卡号码获取,运营商标示获取
可以吧标识存到钥匙串中 实现项目卸载也可已保留
并且菜单项选中,前加上一个点标示。 2. 有三个按钮,和菜单项是一一对应的。也可以实现菜单项一样的功能。 3. 状态栏:在第一个窗格中,显示鼠标坐标的位置最后一个窗格中可以显示Shift键的状态。