IOS-Unity开发的游戏中获取IDFA出现卡死的问题

60 篇文章 3 订阅
40 篇文章 0 订阅

在项目用,由于使用Firebase和Facebook事件分析,需要收集IDFA作为用户的唯一标志位。但是在Unity调用原生获取IDFA时,出现是游戏卡死状态。

经过我多次尝试,发现如果在Unity加载初始资源时,调用原生代码获取IDFA时,可能会使加载资源的主线程阻塞,具体的原因我并不清楚,但是根据Log的信息看,是加载资源被中断了, 没有继续走下去!

改的方式,就是在加载资源完毕之后再去获取IDFA!

另外,加载完毕之后,再去设置Firebase和Facebook的UserID(IDFA),并不会影响收集事件附带UserID!

关于如何获取 IDFA,我是这么做的:

/// <summary>
/// 收集用户的IDFA,可以在 FacebookSDK/SDK/Editor/iOS/FBUnityInterface.mm 文件中添加下面的代码
/* 
#import <AdSupport/ASIdentifierManager.h> //头文件

extern "C"{
    const char* IOSSetUserIDWithIDFA(){
        NSLog(@"Unity Call IOSSetUserIDWithIDFA");
        NSString* userId = [[[ASIdentifierManager sharedManager]advertisingIdentifier]UUIDString];
        NSString* strNone = @"00000000-0000-0000-0000-000000000000";
        if(![userId isEqualToString:strNone]){
            [FBSDKAppEvents setUserID:userId];
            const char* msg = [userId UTF8String];
            // strdup(const char *__s1) 复制mHost字符串,通过Malloc()进行空间分配 
            return strdup(msg);
        }
        return strdup("");
    }
}
*/ 
/// 如果不需要自动收集,应该把 [FBSDKAppEvents activateApp] 注释掉
/// </summary>

然后在自己写的FB管理类里面加入对应的C#方法:

public class FBManager : MonoBehaviour {
	#if UNITY_IPHONE && !UNITY_EDITOR
	[DllImport("__Internal")]
	private static extern string IOSSetUserIDWithIDFA ();
	#endif

	/// <summary>
	/// 获取机器的 IDFA 码,用于识别用户的唯一ID
	/// 可以在启动的时候获取
	/// </summary>
	/// <returns></returns>
	public static string GetIOSUserIDWithIDFA(){
		#if UNITY_IPHONE && !UNITY_EDITOR
			return IOSSetUserIDWithIDFA();
		#else
			return "";
		#endif
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏小败在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值