cocos creator 发布IOS版本(二) AppTrackingTransparency

审核未通过原因:

Guideline 5.1.2 - Legal - Privacy - Data Use and Sharing

The app privacy information you provided in App Store Connect indicates you collect data in order to track the user, including Product Interaction. However, you do not use App Tracking Transparency to request the user's permission before tracking their activity.

参考链接:

https://blog.csdn.net/jiadabin/article/details/111598826

https://blog.csdn.net/qq1031286222/article/details/109822409

苹果官网明确指出:

确保您的应用已准备好用于iOS 14.5,iPadOS 14.5和tvOS 14.5。在即将发布的公共发行版中,所有应用都必须使用AppTrackingTransparency框架来请求用户允许其跟踪或访问其设备的广告标识符的权限。除非您获得用户允许启用跟踪的权限,否则设备的广告标识符值将全为零,并且您可能无法跟踪它们。

意思是14.5以后的版本,想要允许其跟踪或访问其设备的广告标识符,就得使用他们的框架AppTrackingTransparency,所以基本接入广告就得接入框架。

具体步骤:

1、工程 Info.plist文件新增用户授权提示文案,用 Source Code的方式打开Info.plist文件,添加如下代码,string值可根据实际需要自行设置:

添加 NSUserTrackingUsageDescription 字段和自定义文案描述

 <key>NSUserTrackingUsageDescription</key>
<string>该标识符将用于向您投放个性化广告</string>

或者

 <key>NSUserTrackingUsageDescription</key>
<string>Your data will be used to provide you better personalized ads</string> 

权限描述的模板:https://airtable.com/shrgVLgfz6tdbv3Fc/tblZVr9BgJ2Cb0ihB

注意:对应的<string> 的内容一定得写,不然会打回报出

Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage

 2、在添加lib库,在 General中找到Frameworks...中点击加号,找到AppTracking...framework,添加上

 3、添加调取权限窗口代码

commend+N,调取生成class 窗口,选择cocoa Touch Class ,在ios文件夹中生成

 

GDATTrackingIdfa.h

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface GDATTrackingIdfa : NSObject
+ (instancetype)sharedSingleton;
 
+ (void)requestIDFA;
 
- (void) callCocos;
@end

NS_ASSUME_NONNULL_END

 GDATTrackingIdfa.m

#import "GDATTrackingIdfa.h"
#import <AdSupport/AdSupport.h>
#import <AppTrackingTransparency/AppTrackingTransparency.h>

@implementation GDATTrackingIdfa

+ (instancetype)sharedSingleton {
   static GDATTrackingIdfa *_sharedSingleton = nil;
   static dispatch_once_t onceToken;
   dispatch_once(&onceToken, ^{
       //不能再使用alloc方法
       //因为已经重写了allocWithZone方法,所以这里要调用父类的分配空间的方法
       _sharedSingleton = [[super allocWithZone:NULL] init];
       [_sharedSingleton initDelegate];
       [_sharedSingleton checkTransaction];
   });
   return _sharedSingleton;
}

+ (void)requestIDFA {
    if (@available(iOS 14.0, *)) {
        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {

        }];
        NSLog(@"------ requestIDFA---14.0-------");
    }else
    {
        NSLog(@"------调用 requestIDFA----14.0yixia----------");
    }
}

- (void) callCocos {
//   std::string jsCallStr;
//   std::string testString1 =[@"testString1" UTF8String];
//   std::string testString2 = [@"testString2" UTF8String];
//   jsCallStr = cocos2d::StringUtils::format("receiveNative(\"%s\",\"%s\");", testString1.c_str(), testString2.c_str());
//   se::Value *ret = new se::Value();
//   se::ScriptEngine::getInstance()->evalString(jsCallStr.c_str() , -1 , ret);
}

@end

然后再cocos creator 中调用 requestIDFA 接口,弹出权限窗口(注意callStaticMethod会报错,不用管,提示需要三个参数,但实际ios使用就是两个参数 ,不需要methodSignature参数)

       if (cc.sys.os === cc.sys.OS_IOS) 
        {
            console.log("cocos---requestIDFA---");
            jsb.reflection.callStaticMethod("GDATTrackingIdfa","requestIDFA");
            DataMgr.inst.ShowATTracking=true;
            
        }

选用ios14.5及以上系统的测试机,或者使用内部的ipone12进行测试,14.5以下的版本是默认开启权限的不会调出窗口

 最后在提交审核之前贴在备注里面,找到的大神写的一个模板,让ios对你的应用审核更友善

-Guideline x.x.x - Legal - Privacy - Data Collection and Storage
关于此问题,我们根据您的提示,对项目进行了彻底的检查。
发现确实会询问用户是否同意访问本地网络信息。询问用户的原因是为了实现xxxxxxxxxx功能。
这是一个用户十分需要的xxxx功能,跟用户业务息息相关。
如果没有xxxxx,那么用户就xxxxxxxxx,造成损失,这是我们开发者和用户都不愿意看到的。
对此,我们做了充分说明,在看到说明后用户再做出明智的决定。更改后的说明原文为:此App将可xxxxxxxxx.
除此之外,我们并无做出其他不尊重用户的行为。

以上是我这边的处理结果,如果您还有疑问,随时都可以联系我(+86159xxxx8824)。

诚挚的问候!

猜你喜欢

转载自blog.csdn.net/weixin_41843959/article/details/119533647