美文网首页
Unity关于IOS授权应用可追踪用户事件(ATT授权)

Unity关于IOS授权应用可追踪用户事件(ATT授权)

作者: Razy西南 | 来源:发表于2021-10-20 09:30 被阅读0次

    因为ios升级到14版本之后,强制要求app授权AppTrackingTransparency。所以需要在Unity导出的xCode项目执行以下操作:

    1.Plugin/iOS文件夹下,创建一个.mm文件(后缀自己加,先创建一个txt文件即可)copy以下内容:


    #import <Foundation/Foundation.h>

    #import <AppTrackingTransparency/AppTrackingTransparency.h>

    #import "UnityInterface.h"

    extern "C" {

        void _RequestTrackingAuthorizationWithCompletionHandler() {

            if (@available(iOS 14, *)) {

                [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {

                    NSString *stringInt = [NSString stringWithFormat:@"%lu",(unsigned long)status];

                    const char* charStatus = [stringInt UTF8String];

                    UnitySendMessage("IOSMethod", "GetAuthorizationStatus", charStatus);

                }];

            } else {

                UnitySendMessage("IOSMethod", "GetAuthorizationStatus", "-1");

            }

        }

        int _GetAppTrackingAuthorizationStatus() {

            if (@available(iOS 14, *)) {

                return (int)[ATTrackingManager trackingAuthorizationStatus];

            } else {

                return -1;

            }

        }

    }


    2.在脚步文件夹下,创建一个ATTAuth.cs文件,这个是要挂在GameObject上的。copy以下内容:


    [DllImport("__Internal")]

        private static extern void _RequestTrackingAuthorizationWithCompletionHandler();

        [DllImport("__Internal")]

        private static extern int _GetAppTrackingAuthorizationStatus();

        private static Action<int> getAuthorizationStatusAction;

        /// <summary>

        /// 请求ATT授权窗口

        /// </summary>

        /// <param name="getResult"></param>

        public static void RequestTrackingAuthorizationWithCompletionHandler(Action<int> getResult)

        {

            //-1:"ios版本低于14"

            //0: "ATT 授权状态待定";

            //1: "ATT 授权状态受限";

            //2: "ATT 已拒绝";

            //3: "ATT 已授权";

            Debug.Log("RequestTrackingAuthorizationWithCompletionHandler");

            getAuthorizationStatusAction = getResult;

            _RequestTrackingAuthorizationWithCompletionHandler();

        }

        /// <summary>

        /// 获取当前ATT授权状态

        /// </summary>

        /// <returns></returns>

        public static int GetAppTrackingAuthorizationStatus()

        {

            return _GetAppTrackingAuthorizationStatus();

        }

        public void GetAuthorizationStatus(string status)

        {

            getAuthorizationStatusAction?.Invoke(int.Parse(status));

        }


    3.场景中创建一个物体,取名为IOSMethod。把ATTAuth.cs脚本挂到该物体上。

    4.调用ATT弹窗的地方写下面的代码:


    if (Application.platform == RuntimePlatform.IPhonePlayer)

    {

        int curStatus = ATTAuth.GetAppTrackingAuthorizationStatus());

        if(curStatus == 0)

        {

            ATTAuth.RequestTrackingAuthorizationWithCompletionHandler((status) =>

            {

                Debug.Log("ATT status :" + status);

            });

        }

    }


    5.使用xCode打开导出后的项目,在主工程中找到Build Phases -> Link Binary With Libraries 点击下面的+ 添加AppTrackingTransparency.framework, 如下图:

    6,在XCode中,选中Info.plist,点击+号,新增 Privacy - Tracking Usage Description:

    如果已经有此字段,可以不用管。

    注意iOS系统13及以下,运行app时会找不到ATT库,需要判断一下版本,然后把AppTrackingTransparency.framework的 Status选择为Optional.

    相关文章

      网友评论

          本文标题:Unity关于IOS授权应用可追踪用户事件(ATT授权)

          本文链接:https://www.haomeiwen.com/subject/tztaoltx.html