React Native 博览会为 iOS 14.5 实现 Apple App Tracking Transparency (ATT)

Nya*_*sha 5 ios react-native expo

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

app.json 文件:

"infoPlist": {
  "NSUserTrackingUsageDescription": "App requires permission...."
}
Run Code Online (Sandbox Code Playgroud)

Luc*_*ira 7

在 iOS 14 上,Apple 引入了应用程序跟踪透明度权限来访问 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
    }
Run Code Online (Sandbox Code Playgroud)

这可能需要在不久的将来进行更新,因为 expo 会发布新的 SDK 版本并提供解决方案。

编辑

来自世博会 44+

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

expo install expo-tracking-transparency
Run Code Online (Sandbox Code Playgroud)

对于裸应用程序: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."
        }
      ]
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

现在你可以这样使用:

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>
  );
}
Run Code Online (Sandbox Code Playgroud)