当前位置: 代码网 > it编程>App开发>苹果IOS > Unity打包Xcode未授权 App TrackingTransparency (ATT)

Unity打包Xcode未授权 App TrackingTransparency (ATT)

2024年07月28日 苹果IOS 我要评论
每次激活时检查授权状态,直到获取到权限或检测到用户拒绝,因为一旦用户作出选择,他们的决定会被保存,并且不能通过程序再次弹出请求。之后重复唤起授权也会被拒审。ios升级到14版本之后,强制要求app授权AppTrackingTransparency,无法授权审核会被打回。需要在程序激活时唤起授权,

目录

一、审核说明

二、xcode工程配置

三、修改代码


一、审核说明

 ios升级到14版本之后,强制要求app授权apptrackingtransparency,无法授权审核会被打回。

根据苹果官方说明文档:requesttrackingauthorization(completionhandler:) | apple developer documentation

需要在程序激活时唤起授权,

每次激活时检查授权状态,直到获取到权限或检测到用户拒绝,因为一旦用户作出选择,他们的决定会被保存,并且不能通过程序再次弹出请求。之后重复唤起授权也会被拒审。

二、xcode工程配置

framework添加:

info.plist添加:

三、修改代码

在unityappcontroller.mm 文件下:

#import <apptrackingtransparency/attrackingmanager.h>
#import <adsupport/adsupport.h>
- (void)getappidfadatawithcompletion:(void (^)(nsstring *))completion {
    __block nsstring *idfa = @"";
    if (@available(ios 14, *)) {
        attrackingmanagerauthorizationstatus status = [attrackingmanager trackingauthorizationstatus];
        // 用户还没有做出选择时
        if (status == attrackingmanagerauthorizationstatusnotdetermined) {
            [attrackingmanager requesttrackingauthorizationwithcompletionhandler:^(attrackingmanagerauthorizationstatus status) {
                if (status == attrackingmanagerauthorizationstatusauthorized) {
                    idfa = [[asidentifiermanager sharedmanager].advertisingidentifier uuidstring];
                } else {
                    nslog(@"请在设置-隐私-跟踪中允许app请求跟踪");
                    idfa = @"00000000-0000-0000-0000-000000000000";
                }
                if (completion) {
                    completion(idfa);
                }
            }];
        } else if (status == attrackingmanagerauthorizationstatusauthorized) {
            idfa = [[asidentifiermanager sharedmanager].advertisingidentifier uuidstring];
            if (completion) {
                completion(idfa);
            }
        } else {
            nslog(@"用户已拒绝授权或在设置中关闭了idfa");
            idfa = @"00000000-0000-0000-0000-000000000000";
            if (completion) {
                completion(idfa);
            }
        }
    } else {
        idfa = [[asidentifiermanager sharedmanager].advertisingidentifier uuidstring];
        if (completion) {
            completion(idfa);
        }
    }
}
// 在 applicationdidbecomeactive 中调用这个方法
- (void)applicationdidbecomeactive:(uiapplication *)application {

    //...

    [self getappidfadatawithcompletion:^(nsstring *idfa) {
        // 在这里使用 idfa
    }];
}

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com