iOS15系统App Tracking Transparency提审被拒

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS15系统App Tracking Transparency提审被拒相关的知识,希望对你有一定的参考价值。

参考技术A ios提审被拒,苹果的回复是

其实回复很明显,说是在iOS15.4上没有弹出广告授权弹窗,但是我们项目在info.plist文件已经配了NSUserTrackingUsageDescription了,但是仍然被拒。
经过真机调试发现我们的授权弹窗在APP第二次启动才弹出授权弹窗,第一次启动只弹了通知授权弹窗。后来查了一下资料,网上很多文章都没说到点子上,所以我这描述一下。
唤起弹窗需要调用下面这个方法,但是有个前提:需要APP在激活状态下才能唤起弹窗:

详见苹果官方文档 https://developer.apple.com/documentation/apptrackingtransparency/attrackingmanager/3547037-requesttrackingauthorization
因为我们项目启动的时候,通知授权弹窗先弹起来,会使APP进入非激活态,这个时候再唤起IDFA弹窗,就弹不出来了。而第二次启动APP的时候,通知授权的弹窗已经弹过,不会使APP进入非激活态,所以第二次启动APP能正常弹出授权弹窗。因此APP启动的时候如果有多个授权弹窗,要单独处理IDFA的授权弹窗唤起。需要等APP激活后再调用这个方法
一般推荐在

这个方法中调用。如果你业务需要在使用到的时候再调用,那么需要判断一下APP是否是激活态,是的话就直接调用,不是的话需要做个标记,等收到激活通知后再调用。如:

为 iOS 14.5 实施 Apple App Tracking Transparency (ATT) 的 React Native Expo

【中文标题】为 iOS 14.5 实施 Apple App Tracking Transparency (ATT) 的 React Native Expo【英文标题】:React native expo implementing Apple App Tracking Transparency (ATT) for iOS 14.5 【发布时间】:2021-05-04 14:16:54 【问题描述】:

在 react native expo 上实现 Apple App Transparency Tracker (ATT) 功能的最佳方式是什么?即使我添加了以下内容,我的应用仍然被苹果拒绝:

app.json 文件:

"infoPlist": 
  "NSUserTrackingUsageDescription": "App requires permission...."

【问题讨论】:

【参考方案1】:

在 iOS 14 上,Apple 引入了 App Tracking Transparency 权限以访问 IDFA。 您需要提示用户是否允许您的应用使用跟踪它们的库,将其添加到 infoPlist 仅允许您在应用程序中使用此 API。

Expo 还没有这个功能,但是你可以使用一些库来提示权限

示例:https://docs.expo.io/versions/v41.0.0/sdk/facebook/#facebookgetpermissionsasync

您可以使用其他库,例如https://github.com/mrousavy/react-native-tracking-transparency

您可以在哪里请求应用跟踪

    import  getTrackingStatus  from 'react-native-tracking-transparency';

    const trackingStatus = await getTrackingStatus();
    if (trackingStatus === 'authorized' || trackingStatus === 'unavailable') 
      // enable tracking features
    


    import  requestTrackingPermission  from 'react-native-tracking-transparency';
    
    const trackingStatus = await requestTrackingPermission();
    if (trackingStatus === 'authorized' || trackingStatus === 'unavailable') 
      // enable tracking features
    

这可能需要在不久的将来进行更新,因为 expo 发布了一个带有解决方案的新 SDK 版本。

编辑

来自 44+ 世博会

Expo 现在有一个 TrackTransparency 库:(https://docs.expo.dev/versions/latest/sdk/tracking-transparency/)

expo install expo-tracking-transparency

对于裸应用:https://github.com/expo/expo/tree/main/packages/expo-tracking-transparency#installation-in-bare-react-native-projects

您可以将其作为插件添加到您的app.json


  "expo": 
    "plugins": [
      [
        "expo-tracking-transparency",
        
          "userTrackingPermission": "This identifier will be used to deliver personalized ads to you."
        
      ]
    ]
  

现在你可以这样使用:

import React,  useEffect  from 'react';
import  Text, StyleSheet, View  from 'react-native';
import  requestTrackingPermissionsAsync  from 'expo-tracking-transparency';

export default function App() 
  useEffect(() => 
    (async () => 
      const  status  = await requestTrackingPermissionsAsync();
      if (status === 'granted') 
        console.log('Yay! I have user permission to track data');
      
    )();
  , []);

  return (
    <View style=styles.container>
      <Text>Tracking Transparency Module Example</Text>
    </View>
  );

【讨论】:

感谢 Lucas,我​​已经尝试过了,遗憾的是它只有在您退出世博会时才有效 嗨 @Nyasha,我有一个托管的 Expo,Facebook 解决方案对我有用。 此消息应该出现在应用程序的开头还是用户首次使用 FB 登录时?使用requestTrackingPermission 请求访问是否涵盖了 facebook 指南并确保即使用户决定不允许跟踪也没有跟踪? @LucasOliveira 这个消息需要提示你的应用是否打开,否则苹果会拒绝你的新二进制文件。我不使用 FB 登录,所以我不知道在用户使用 FB 帐户登录之前是否需要这样做。当用户拒绝跟踪时,您有责任确保您的应用程序没有调用跟踪用户的 FB 库(例如广告)。老实说,如果你使用这个库,你可以安全地使用 Facebook.setAdvertiserTrackingEnabledAsync(enabled: boolean): Promise 例如。【参考方案2】:

你需要先申请 Tracking 权限(我用的是 react-native-permissions):

import  request, RESULTS, PERMISSIONS  from 'react-native-permissions'

export const requestPermissionTransparency = async () => 
  return await request(PERMISSIONS.IOS.APP_TRACKING_TRANSPARENCY)


useEffect(() => 
    ;(async () => 
      const result = await requestPermissionTransparency()
      if (result === RESULTS.GRANTED) 
        //You need to enable analytics (fb,google,etc...)
        await firebase.analytics().setAnalyticsCollectionEnabled(true)
        console.log('Firebase Analytics: ENABLED')
      
    )()
  , [])

记得在根项目中添加这个文件:

// <project-root>/firebase.json

  "react-native": 
    "analytics_auto_collection_enabled": false
  

参考:https://rnfirebase.io/analytics/usage

【讨论】:

【参考方案3】:

我最终从 expo 使用的解决方案是使用 Facebook.getPermissionsAsync()

https://expo.canny.io/feature-requests/p/expo-permissions-add-support-to-apptrackingtransparency-permission-on-ios

【讨论】:

【参考方案4】:

41+ 世博会

跟踪透明度: https://docs.expo.io/versions/latest/sdk/tracking-transparency/

import  requestTrackingPermissionsAsync  from 'expo-tracking-transparency';
const  status  = await requestTrackingPermissionsAsync();
if (status === 'granted') // do something

40 届及以下世博会

Admob:https://docs.expo.io/versions/latest/sdk/admob/

import  requestPermissionsAsync  from 'expo-ads-admob'
const  status  = await requestPermissionsAsync()
if (status === 'granted') // do something

【讨论】:

以上是关于iOS15系统App Tracking Transparency提审被拒的主要内容,如果未能解决你的问题,请参考以下文章

iOS 14.5 App Tracking Transparency for firebase log in react-native app

为 iOS 14.5 实施 Apple App Tracking Transparency (ATT) 的 React Native Expo

如何在 Flutter 中实现 App Tracking Transparency

App Tracking Transparency 隐私复选框和应用商店发布拒绝

如何在ios11上使用视觉框架的Object tracking API?

埋点(Event Tracking)vs 无埋点(Codeless Tracking) vs 可视化埋点(Visual Event Tracking)