xcode层获取IDFV、IDFA
parent
b787f651b5
commit
f0ae3da036
|
|
@ -0,0 +1,68 @@
|
|||
# 宏定义列表,供脚本添加到 PlayerSettings 的宏定义中
|
||||
Define_list:
|
||||
- BI_PHXH # BI
|
||||
- LOGIN_PHONE # 手机登录
|
||||
|
||||
# 应用包名
|
||||
PackageName: "com.kedrgame.xuesong"
|
||||
|
||||
# 是否海外渠道
|
||||
IsOversea: false
|
||||
|
||||
# 多语言配置
|
||||
Language: "Lan_CN"
|
||||
|
||||
# 当前版本号
|
||||
Version: "0.9.0"
|
||||
|
||||
# BuildCode
|
||||
BuildCode: 4
|
||||
|
||||
# 构建资源远程上传路径
|
||||
OssRemoteUploadPath: "oss://nld-dev-yhpxkqgzatnrmbws/client_res/Build"
|
||||
AssetsEndPoint: "oss-cn-chengdu.aliyuncs.com"
|
||||
|
||||
# 阿里云 OSS 配置
|
||||
ConfigAccessKeyId: "LTAI5tPLKwa1cSD1woBLvNBq"
|
||||
ConfigAccessKeySecret: "aPvNg3waBzXas8nnn2lo46o1TEQY8X"
|
||||
ConfigBucketName: "nld-dev-yhpxkqgzatnrmbws"
|
||||
ConfigURL: "http://yhpxkqgzatnrmbws.kedrgame.com"
|
||||
|
||||
# http请求配置
|
||||
AppAccessKey: "0SoE48O9sayjkG8J"
|
||||
AppKey: "uUi_UI1oMKWo0VOSN1zme17Z70-FlAv3Lcx2mNhoYe4="
|
||||
|
||||
# BI服务器配置
|
||||
PhxhBiAccessKeyId: "yd9kWI798IWyyq1t" # BI AccessKeyId
|
||||
PhxhBiScretKey: "iQLHTbOqeXtZZpxOZve-PDxTK9DkHPSKRbpXb30eS3g=" # BI SecretKey
|
||||
WxPayAppId: "wxa286fb2f1bcb664c" # 微信支付 AppID
|
||||
|
||||
# 崩溃监控配置(仅 Android)
|
||||
CrashSight_Android:
|
||||
id: "669a94ce69" # 崩溃上报的 App ID
|
||||
key: "d9412717-2416-4270-b8bc-f7a0805f988f" # 崩溃上报的 Key
|
||||
|
||||
# TalkingData初始化
|
||||
TalkingData:
|
||||
appid: "2D0025FE20F34810BADABEFC00D32D22" # 测试包的App ID
|
||||
channel: "Dev" # 上报渠道
|
||||
|
||||
# 数数科技(ThinkingData)初始化
|
||||
ThinkingData:
|
||||
appid: "debug-appid" # 数数科技App ID
|
||||
serverurl: "https://phxh-receiver.kedrgame.com/" # 数数科技数据接收地址
|
||||
|
||||
Packages:
|
||||
- DeviceHelper_iOS@latest
|
||||
|
||||
# 爱加密配置
|
||||
Encryption:
|
||||
ApiUrl: "https://runenc.ijiami.cn/common" # 爱加密API地址
|
||||
StrategyName: "Dev加固策略" # 加密策略名称
|
||||
Username: "PHXHJG" # 爱加密用户名
|
||||
Password: "LaMYRIx0UzFgCIR" # 爱加密密码
|
||||
ToolPath: "${WORKSPACE}/Tool/build_tools/encryptionTool-v4.3.6-202409.jar" # 加密工具路径
|
||||
NeedSign: true # 是否需要签名
|
||||
SignName: "朴合辛火安卓" # 签名名称
|
||||
SignVersion: 4 # 签名版本(1-8)
|
||||
RetryCount: 3 # 异常重试次数
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
#import <Foundation/Foundation.h>
|
||||
#import <AdSupport/AdSupport.h>
|
||||
#import <AppTrackingTransparency/AppTrackingTransparency.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// 手动声明 UnitySendMessage
|
||||
void UnitySendMessage(const char* obj, const char* method, const char* msg);
|
||||
|
||||
// 辅助方法:将 NSString 转换为 C 语言字符串
|
||||
const char* ConvertNSStringToCString(NSString* nsString) {
|
||||
if (nsString == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
const char* nsStringUtf8 = [nsString UTF8String];
|
||||
char* cString = (char*)malloc(strlen(nsStringUtf8) + 1);
|
||||
strcpy(cString, nsStringUtf8);
|
||||
return cString;
|
||||
}
|
||||
|
||||
// Unity 调用:请求/拉取 IDFA (保留此方法供 Unity 安全拉取数据)
|
||||
void RequestIDFA() {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
if (@available(iOS 14.0, *)) {
|
||||
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
NSString *idfa = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
|
||||
UnitySendMessage("GameLauncher", "OnIDFAResult", [idfa UTF8String]);
|
||||
});
|
||||
}];
|
||||
} else {
|
||||
NSString *idfa = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
|
||||
UnitySendMessage("GameLauncher", "OnIDFAResult", [idfa UTF8String]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Unity 调用:获取 IDFV
|
||||
const char* GetIDFV() {
|
||||
NSString* idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
|
||||
return ConvertNSStringToCString(idfv);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
// ==========================================
|
||||
// 新增:利用 iOS 底层生命周期,实现启动自动弹窗
|
||||
// ==========================================
|
||||
@interface AutoIDFATrigger : NSObject
|
||||
@end
|
||||
|
||||
@implementation AutoIDFATrigger
|
||||
|
||||
// +load 方法会在 App 刚启动、类被加载到内存时自动执行(比 Unity 引擎初始化还要早)
|
||||
+ (void)load {
|
||||
// 注册监听:当 App 进入活跃状态时触发
|
||||
// 注意:ATT 弹窗必须在 App 处于 Active 状态时才能成功弹出
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(onAppDidBecomeActive)
|
||||
name:UIApplicationDidBecomeActiveNotification
|
||||
object:nil];
|
||||
}
|
||||
|
||||
+ (void)onAppDidBecomeActive {
|
||||
// 触发一次后立即移除监听,防止每次从后台切回前台都重复执行
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil];
|
||||
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
if (@available(iOS 14.0, *)) {
|
||||
// 只有当状态是“未决定(NotDetermined)”时,才主动触发弹窗
|
||||
if ([ATTrackingManager trackingAuthorizationStatus] == ATTrackingManagerAuthorizationStatusNotDetermined) {
|
||||
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
NSString *idfa = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
|
||||
// 尝试发送给 Unity。如果 Unity 还没加载完,这句会失效,
|
||||
// 但没关系,Unity 后续调用 RequestIDFA() 时还能拿到底层缓存的 IDFA。
|
||||
UnitySendMessage("GameLauncher", "OnIDFAResult", [idfa UTF8String]);
|
||||
});
|
||||
}];
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
@ -0,0 +1 @@
|
|||
1.0.0
|
||||
Loading…
Reference in New Issue