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你需要先申请 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)