Files
Zoomatch_unity_ios/Assets/Plugins/iOS/DeviceIdentifierNative.mm
T
2026-05-28 15:23:36 +08:00

61 lines
2.8 KiB
Plaintext

#import <AdSupport/ASIdentifierManager.h>
#import <AppTrackingTransparency/AppTrackingTransparency.h> // iOS 14及以上需要
#import <UIKit/UIKit.h>
extern "C" {
// 获取IDFA的函数
const char* _GetIDFA() {
// 检查iOS版本
if (@available(iOS 14, *)) {
// 检查当前追踪授权状态。注意:实际请求权限的弹窗应在合适时机主动调用,这里仅获取当前状态下的IDFA。
ATTrackingManagerAuthorizationStatus status = [ATTrackingManager trackingAuthorizationStatus];
if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
// 用户已授权
NSString *idfaString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
return strdup([idfaString UTF8String]);
} else {
// 用户未授权、拒绝或受限
NSLog(@"用户未授权广告追踪。状态: %ld", (long)status);
return strdup("");
}
} else {
// Fallback on earlier versions - iOS 14以下版本
if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
NSString *idfaString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
return strdup([idfaString UTF8String]);
} else {
NSLog(@"用户限制了广告追踪。");
return strdup("");
}
}
}
// 请求追踪权限的函数 (应在C#端选择合适的时机调用,例如用户点击同意隐私协议后)
void _RequestTrackingPermission() {
if (@available(iOS 14, *)) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
// 此回调在用户做出选择后执行
NSString *idfaString = @"";
if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
idfaString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
}
// 可以使用UnitySendMessage将结果异步回传给Unity
// UnitySendMessage("GameObjectName", "MethodName", [idfaString UTF8String]);
}];
} else {
// iOS 13或更低版本,无需请求权限,直接检查isAdvertisingTrackingEnabled
// 这里可以不做处理,或者也通过UnitySendMessage通知Unity
}
}
// 获取IDFV的函数
const char* _GetIDFV() {
NSString *idfvString = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
if (idfvString) {
return strdup([idfvString UTF8String]);
} else {
return strdup("");
}
}
}