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

2021-10-20  本文已影响0人  Razy西南

因为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.

上一篇下一篇

猜你喜欢

热点阅读