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

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

app.json 文件:

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

【问题讨论】:

    标签: ios react-native expo


    【解决方案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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-21
          • 2021-05-22
          • 2021-12-03
          • 1970-01-01
          • 2022-01-18
          • 1970-01-01
          • 2021-05-18
          • 1970-01-01
          相关资源
          最近更新 更多