最近的项目中用到了几个比较不常用的方法:
(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产生唯一标示,不受安装卸载影响
在移动设备开发中,获取设备的唯一标识是一个常见的需求,这通常用于跟踪设备、实现个性化设置或进行设备授权。在Android和iOS系统中,开发者可以使用特定的API来获取这些信息。本文将深入探讨如何在Android和iOS...
获取U盘的唯一标示符号主要是为了确保我们能够准确地识别特定的U盘,这在数据备份、设备授权或安全管理等场景下非常有用。 首先,我们需要了解的是,U盘的唯一标识符通常是一个名为Volume Serial Number(卷序列号...
"IOS设备唯一ID"是这个话题的核心,它涉及到如何在iOS系统中获取一个能标识特定设备的唯一标示。传统的iOS设备唯一标识符,如UDID(Unique Device Identifier)和广告标识符(Advertising Identifier, IDFA),由于...
在iOS开发中,获取设备唯一标识符是常用于区分不同设备、存储用户数据或实现个性化功能的一个关键步骤。本文将详细讲解如何在iOS应用中获取设备的唯一标识符,并介绍如何利用Visual Format Language (VFL)来添加界面...
iOS 2.0版本以后UIDevice提供一个获取设备唯一标识符的方法uniqueIdentifier,通过该方法我们可以获取设备的序列号,这个也是目前为止唯一可以确认唯一的标示符。好景不长,因为该唯一标识符与手机一一对应,苹果...
在iOS开发中,获取设备的唯一标识符是一个常见的需求,特别是在需要区分不同用户设备或存储设备特定数据时。本文将详细讲解如何在iOS系统中获取设备的唯一标识,并讨论相关的重要知识点。 首先,我们需要理解“UUID...
当我们拿到用户的唯一标识查询地址(参见 获取运营商接口URL 页面)后,直接通过 HTTP 协议访问改地址,即可得到该手机用户在运营商数据库中的唯一标识值,其值
### 组织唯一标示符(Organizationally Unique Identifier, OUI) #### 一、概述 组织唯一标示符(OUI)是一种特定于组织的独特标识符,它由国际电子技术委员会(IEC)下的国际标准化组织(ISO)授权的国际电工委员...
3. 当需要获取设备唯一标识时,首先检查KeyChain中是否存在之前存储的UUID。如果存在,直接读取;如果不存在,再生成新的UUID并存入KeyChain。 4. 这样,无论应用被卸载多少次,只要用户没有清除KeyChain中的数据,...
GUID vb6.0 vb 生成唯一标示,GUID vb6.0 vb 生成唯一标示,
写了一个生成唯一标识的字符串工具,前面放上去的时候,有人说有可能出现重复的情况,我觉得重复的几率不是没有,但是几乎完全可以不用考虑,我说一下我的生成思想,大家看看几率会有多大:我的生成方式是: 当前的...
iOS 设备唯一标示符(UDID)解决方案 ZKUDIDManager ,ZKUDIDManager是一个开源的基于Keychain和IDFV的iOS设备唯一标示符(UDID...
在描述中,“行业分类-电子-一种新型多功能变电站标示牌”进一步明确了这个话题属于电子行业的一个细分领域,即电子政务。这意味着这种标示牌可能涉及到政府对公共设施,如变电站,进行数字化管理和监控的一部分。...
"各类颜色标示值获取工具"就是这样一个实用的应用,它能够帮助用户快速、方便地获取所需颜色的各种表示形式,包括网页色值、RGB值以及16进制表示值。 首先,我们来了解一下网页色值。网页色值通常指的是HTML和CSS中...
为了完善这个功能,我们还可以增加一些额外的交互设计,比如添加提示信息,显示当前标示线对应的数值,或者提供一个清除按钮,让用户能够移除标示线。此外,`PlotLine`的配置项非常丰富,可以根据需要调整其样式,如...
《基于无线通讯功能标示桩的高压直埋电缆管理系统》 在现代电子行业中,高压直埋电缆管理系统扮演着至关重要的角色。随着城市化进程的加快,电力设施的建设日益繁复,如何有效地管理和维护这些电缆成为了电力部门...
此外,"词性标示工具.exe"的强大可能体现在以下几个方面: 1. 处理速度:高效执行词性标注,处理大规模文本。 2. 支持多种格式:可能支持输入各种文本格式,如纯文本、HTML、XML等。 3. 用户友好:提供直观的图形...
标题中的“EXCEL版标示生成系统 仓库标识自动生成+自动匹配商品图片+自动生成二维码”揭示了这个压缩包包含的是一款基于Excel的仓库管理工具。它具有三项主要功能:1) 仓库标识自动生成,2) 自动匹配商品图片,3) ...