1、如何获取IDFA并保存至keychain;
2、提交应用时如何选择;
string strRet;
NSString identifier = [[NSBundle mainBundle] bundleIdentifier];
NSString keyName = [[NSString stringWithFormat:@"%@adfaname",identifier]init];
NSString keyValue = [[NSString stringWithFormat:@"%@adfavalue",identifier]init];
NSMutableDictionary KeyNameValue = (NSMutableDictionary )[CHKeychain load:keyName];
NSString ValueADFA= [KeyNameValue objectForKey:keyValue];
if(ValueADFA)
{
strRet = [[ValueADFA uppercaseString] UTF8String];
}
else
{
NSString adId =[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
//NSLog(@"adId: %@",adId);
strRet = [[adId uppercaseString] UTF8String];
NSMutableDictionary usernamepasswordKVPairs = [NSMutableDictionary dictionary];
[usernamepasswordKVPairs setObject:adId forKey:keyValue];
[CHKeychain save:keyName data:usernamepasswordKVPairs];
}
return strRet;
这里尽量要保证IDFA的唯一性,如果广告联盟使用手工 *** 作,每下载应用一次后手动去重置一下广告跟踪,然后再下载。这样对于它来讲是二次下载,对于我们来讲,这样的用户其实属于“作弊”了。所以没有将IDFA存到UserDefault中,每次都从keychain上取
使用IDFA,程序中一定要引用AdsupportFramework,因为我们项目并没有使用到友盟或者其它第三方的SDK,所以提交的情况跟其它引用相关SDK的可能不太一样。但网上关于这个提的问题倒很多,已经上线给出建议和解决方案的却并不多。因为我们项目已经提交并审核通过了,这里只是记录一下
首先一定要勾选申请项目内使用了IDFA,然后我们项目勾选的是“Serve advertisements within the app”NSString idfa = [ASIdentifierManager sharedManager]advertisingIdentifierUUIDString;
NSLog(@"uuid == %@",idfa);
1 idfa == 40879ADB-E3E8-4FD4-BE28-86DF97532DC7 //删除APP后值不会变
2 idfa == F46F1D35-BE54-41C7-B174-B332D4F0A871 //重置后变化了
3 idfa == 00000000-0000-0000-0000-000000000000 //关闭广告 开启后值不变
NSString idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
NSLog(@"idfv == %@",idfv);
1 idfv == 7244DCA8-BFB0-4A45-AD56-BA9B886F7976
2 idfv == 11D47793-BC0F-4446-B891-6E42E0697BA9 //删除APP后会变化需要。根据查询广告标识符系统官方可知,重置广告标识符需要重置,IDFA 全称为 Identity for Advertisers ,即广告标识符,用来标记用户,最广泛的用途是用于投放广告、个性化推荐等。一般来说,新增用户是指首次联网使用应用的用户,以设备号(DeviceID)作为判断标准。
举例(一般情况下):
用户A在该设备D上第1次打开app时,会被记作为1个新增用户;
该用户A在设备D上卸载应用后重新安装该应用,不会被记1个新增用户;
该用户A在设备D上通过其他账号登录,不会被记作1个新增用户;
该用户A在其他新设备E上第1次打开APP时,会被计作为1个新增用户。
新增用户指标的统计方法,可以简单地理解为,每次获取到1个新的DeviceID,新增用户数+1;在不同平台上,其统计SDK获得DeviceID的处理方法有所不同:
一、Android平台
统计SDK可直接读取到Android设备的IMEI号,用该IMEI号,即可生成DeviceID。
DeviceID可以通过以下公式获取:DeviceID=x1+MD5(android_imei_mac)
二、IOS平台
1、UDID
UDID(设备唯一标识符,Unique Device Identifier),UDID,之前一直是设备唯一标识的神器,各大应用和统计SDK均通过获取UDID标识设备。不过,2013年5月1日后,读取UDID的应用,将被拒绝上架,相当于把这条路封死了。
2、MAC地址
IOS70以前的设备,可读取MAC地址,通过该MAC地址,即可生成DeviceID。
DeviceID可以通过以下公式获取:DeviceID=x2+MD5(ios_mac)
IOS70及以后的设备,MAC地址返回的是一个固定值,因此对于iOS70及以后的设备,将无法通过MAC地址来标识设备的唯一性。
3、openUDID
openUDID,是通过第一个带有OpenUDID SDK包的App生成的,在下列2种情况下,openUDID会重新生成:
(1)、用户卸载了全部带有OpenUDID SDK包的App后,并重新启动设备后,openUDID将会重新生成;
(2)、用户更新了ios系统,或者选择了恢复出厂设置是,openUDID将会重新生成;
考虑到90%以上的用户在IOS系统更新后,均会重新生成openUDID,采用openUDID方法标识用户唯一性也慢慢被弃用。
4、IDFA&IDFV
(1)、IDFA(广告标识符,Advertising Identifier),是苹果公司提供的用于追踪用户的广告ID,同一手机的不同APP对应着相同的IDFA,IDFA可通过以下步骤重置:设置-隐私-广告-还原广告标识符。
如DeviceID可以通过以下公式获取:DeviceID=x2+MD5(IDFA)。
因为IDFA会存在取不到的情况,因此需要选用其他的ID作为DeviceID;在取不到IDFA的情况下,我们选用IDFV;
(2)、IDFV(Vindor标示符,IdentifierForVendor),一般用于追踪用户在应用内的行为,每个设备在所属同一个Vender的应用里值是相同的;如果用户删掉了该vender的所有APP,IDFV将会被重置。
DeviceID可以通过以下公式获取:DeviceID=x2+MD5(IDFV)。
5、UUID
UUID(通用唯一标识码,Universally Unique Identifier),通用唯一识别码,每次生成均不一样;第1次生成后UUID后,需要保存到钥匙串(keyChain)中;应用被删除再重装时,仍然可以从钥匙串得取到UUID;在一台设备上,同一个开发者账号的所有APP,可获取到相同的UDID;刷机或者重新安装系统后,UUID将重新生成。
DeviceID可以通过以下公式获取:DeviceID=x2+MD5(UUID)。
综上可知,IOS的DeviceID的获取方法可以概括为:
IOS70以前的设备,DeviceID=x2+MD5(ios_mac)
IOS70及以后的设备,DeviceID=x2+MD5(IDFA/IDFV/UUID),即先去IDFA的值,取不到IDFA时去取IDFV的值,再取不到时IDFA时,则生成UUID;
补充说明:这里x1和x2,是为了区分不同类型DeviceID,自定义的前缀。
如:
x1abcd123……
x2abcd123……
通过查看前缀,即可知道这些设备号是Android的还是iOS的。一、 现有方案
1、UDID(Unique Device Identifier)
获取方法:[[UIDevice currentDevice] uniqueIdentfier]
不足:iOS5之后,该方法返回的结果在所有应用中都相同,并且卸载应用、刷机、还原设备均不会发生改变,该方法被标记为废弃!最终,在2013年5月1号之后,AppStore禁止任何使用该方法的应用上架。iOS7中对外公开的API中已经移除了该方法!
2、保存在NSUserDefault中的UUID
获取方法:>1、在同一个设备上的所有App都会取到相同的值。
2、如果用户完全重置系统((设置程序 -> 通用 -> 还原 -> 还原位置与隐私) ,或者用户明确的还原广告(设置程序-> 通用 -> 关于本机 -> 广告 -> 还原广告标示符) ,那么广告标示符会重新生成。
1、每次调用得到UUID,系统都会返回一个新的唯一标示符。
2、如果想使用这个作为设备的唯一标识,可以存储到钥匙串。
证书里边添加设备的时候用到。
获取不到,私有方法可能可以获取到。
被禁用,每个手机获取到的mac地址都是一样的。
参考: >
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)