`
gaobusi
  • 浏览: 199455 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

UIDIvice的几个拓展功能(获取唯一标示、判断是否越狱)

    博客分类:
  • IOS
阅读更多

最近的项目中用到了几个比较不常用的方法:

 

(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获取唯一标示jar

    android 6.0以后,android获取唯一标示的jar,不受需要判断权限,一个apk产生唯一标示,不受安装卸载影响

    获取设备唯一标识的例子

    在移动设备开发中,获取设备的唯一标识是一个常见的需求,这通常用于跟踪设备、实现个性化设置或进行设备授权。在Android和iOS系统中,开发者可以使用特定的API来获取这些信息。本文将深入探讨如何在Android和iOS...

    获取U盘标示符号C#

    获取U盘的唯一标示符号主要是为了确保我们能够准确地识别特定的U盘,这在数据备份、设备授权或安全管理等场景下非常有用。 首先,我们需要了解的是,U盘的唯一标识符通常是一个名为Volume Serial Number(卷序列号...

    IOS设配唯一标示

    "IOS设备唯一ID"是这个话题的核心,它涉及到如何在iOS系统中获取一个能标识特定设备的唯一标示。传统的iOS设备唯一标识符,如UDID(Unique Device Identifier)和广告标识符(Advertising Identifier, IDFA),由于...

    ios 获取设备唯一标示符(使用VFL语法添加约束)

    在iOS开发中,获取设备唯一标识符是常用于区分不同设备、存储用户数据或实现个性化功能的一个关键步骤。本文将详细讲解如何在iOS应用中获取设备的唯一标识符,并介绍如何利用Visual Format Language (VFL)来添加界面...

    iOS 获取设备唯一标示符的方法详解

    iOS 2.0版本以后UIDevice提供一个获取设备唯一标识符的方法uniqueIdentifier,通过该方法我们可以获取设备的序列号,这个也是目前为止唯一可以确认唯一的标示符。好景不长,因为该唯一标识符与手机一一对应,苹果...

    获取iOS设备唯一标识

    在iOS开发中,获取设备的唯一标识符是一个常见的需求,特别是在需要区分不同用户设备或存储设备特定数据时。本文将详细讲解如何在iOS系统中获取设备的唯一标识,并讨论相关的重要知识点。 首先,我们需要理解“UUID...

    tencentyun#qcloud-documents#获取手机用户唯一标示值1

    当我们拿到用户的唯一标识查询地址(参见 获取运营商接口URL 页面)后,直接通过 HTTP 协议访问改地址,即可得到该手机用户在运营商数据库中的唯一标识值,其值

    mac与oui-组织唯一标示符

    ### 组织唯一标示符(Organizationally Unique Identifier, OUI) #### 一、概述 组织唯一标示符(OUI)是一种特定于组织的独特标识符,它由国际电子技术委员会(IEC)下的国际标准化组织(ISO)授权的国际电工委员...

    UUID+KeyChain实现iOS唯一标示UDID

    3. 当需要获取设备唯一标识时,首先检查KeyChain中是否存在之前存储的UUID。如果存在,直接读取;如果不存在,再生成新的UUID并存入KeyChain。 4. 这样,无论应用被卸载多少次,只要用户没有清除KeyChain中的数据,...

    GUID 唯一标示

    GUID vb6.0 vb 生成唯一标示,GUID vb6.0 vb 生成唯一标示,

    唯一标示字符串生成工具类

    写了一个生成唯一标识的字符串工具,前面放上去的时候,有人说有可能出现重复的情况,我觉得重复的几率不是没有,但是几乎完全可以不用考虑,我说一下我的生成思想,大家看看几率会有多大:我的生成方式是: 当前的...

    iOS 设备唯一标示符(UDID)解决方案 ZKUDIDManager.zip

    iOS 设备唯一标示符(UDID)解决方案 ZKUDIDManager ,ZKUDIDManager是一个开源的基于Keychain和IDFV的iOS设备唯一标示符(UDID...

    电子-一种新型多功能变电站标示牌

    在描述中,“行业分类-电子-一种新型多功能变电站标示牌”进一步明确了这个话题属于电子行业的一个细分领域,即电子政务。这意味着这种标示牌可能涉及到政府对公共设施,如变电站,进行数字化管理和监控的一部分。...

    各类颜色标示值获取工具

    "各类颜色标示值获取工具"就是这样一个实用的应用,它能够帮助用户快速、方便地获取所需颜色的各种表示形式,包括网页色值、RGB值以及16进制表示值。 首先,我们来了解一下网页色值。网页色值通常指的是HTML和CSS中...

    higharts 点击点添加标示线

    为了完善这个功能,我们还可以增加一些额外的交互设计,比如添加提示信息,显示当前标示线对应的数值,或者提供一个清除按钮,让用户能够移除标示线。此外,`PlotLine`的配置项非常丰富,可以根据需要调整其样式,如...

    行业分类-电子-关于基于无线通讯功能标示桩的高压直埋电缆管理系统的说明分析.rar

    《基于无线通讯功能标示桩的高压直埋电缆管理系统》 在现代电子行业中,高压直埋电缆管理系统扮演着至关重要的角色。随着城市化进程的加快,电力设施的建设日益繁复,如何有效地管理和维护这些电缆成为了电力部门...

    词性标示工具.exe

    此外,"词性标示工具.exe"的强大可能体现在以下几个方面: 1. 处理速度:高效执行词性标注,处理大规模文本。 2. 支持多种格式:可能支持输入各种文本格式,如纯文本、HTML、XML等。 3. 用户友好:提供直观的图形...

    EXCEL版标示生成系统 仓库标识自动生成+自动匹配商品图片+自动生成二维码.zip

    标题中的“EXCEL版标示生成系统 仓库标识自动生成+自动匹配商品图片+自动生成二维码”揭示了这个压缩包包含的是一款基于Excel的仓库管理工具。它具有三项主要功能:1) 仓库标识自动生成,2) 自动匹配商品图片,3) ...

Global site tag (gtag.js) - Google Analytics