为 iOS 14.5 实施 Apple App Tracking Transparency (ATT) 的 React Native Expo
Posted
技术标签:
【中文标题】为 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你需要先申请 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
【讨论】:
以上是关于为 iOS 14.5 实施 Apple App Tracking Transparency (ATT) 的 React Native Expo的主要内容,如果未能解决你的问题,请参考以下文章
iOS 14.5 App Tracking Transparency for firebase log in react-native app
iOS 14.5揭示Airtags新功能丨OLED屏iPad最快明年发布!