flutter로 만든 앱에 앱 업데이트 반려 회신이 왔다.
AT T에 관련된 앱 심사 반려는 꾸준히 받았는데 이번에는 왠지 내가 잘못된 ATT 코드를 쓰고 있나 다시 한 번 곰곰히 생각해보게 되는 심사오류내용이었다.
오류내용
Guideline 2.1 - Information Needed
The app uses the AppTrackingTransparency framework, but we are unable to locate the App Tracking Transparency permission request when reviewed on iOS 17.6.1.
Next Steps
Explain where we can find the App Tracking Transparency permission request in the app. The request should appear before any data is collected that could be used to track the user.
If App Tracking Transparency is implemented but the permission request is not appearing on devices running the latest operating system, review the available documentation and confirm App Tracking Transparency has been correctly implemented.
If your app does not track users, update your app privacy information in App Store Connect to not declare tracking. You must have the Account Holder or Admin role to update app privacy information.
Resources
- Tracking is linking data collected from the app with third-party data for advertising purposes, or sharing the collected data with a data broker. Learn more about tracking.
- See Frequently Asked Questions about the requirements for apps that track users.
- Review developer documentation for App Tracking Transparency.
해결강구중
ios > Runner > info.plist 에 코드도 문구도 모두 잘 넣었는데 .. 이 오류내용에 대한 답변으로 많이 달리는 info.plist 파일의 코드누락부분은 내가 생각하기에는 이번엔 이 오류가 아닌 것 같았다. (이미 잘 문구도 뜨고 있기 때문)
request tracking authorization이 뭐지
내 코드는 이런게 없는거같은데.. 검색해보았다. (결론은 있었다..내가 모르고 썼을 뿐)
ios 15 이후부터는
앱을 완전히 실행된 후에만 사용할 수 있게 변경되도록 하였다..
앱 실행 직후 이 팝업 호출하면 팝업 호출 시점을 view controller에서 호출하라해서 늦게 호출하면 되나싶어 수정한다.
아래처럼
<나랑 비슷한 오류를 수정하신 개발자님 링크>
https://elfinlas.github.io/dart_flutter/231027_apple-reject-guide-2.1-apptrackingtransparency/
기존 코드가 200 seconds로 설정되어있었는데 1000으로 변경해줬다.
await Future.delayed(const Duration(milliseconds: 1000));
근데 이 아래를 보니
String uuid="";
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) => initPlugin()); //앱추적
getPackageInfo();
_verifyVersion();
super.initState();
}
Future<void> initPlugin() async { //앱추적
try {
final TrackingStatus status =
await AppTrackingTransparency.trackingAuthorizationStatus;
setState(() => _authStatus = '$status');
// If the system can show an authorization request dialog
if (status == TrackingStatus.notDetermined) {
// Show a custom explainer dialog before the system dialog
//await showCustomTrackingDialog(context);//다이알로그
// Wait for dialog popping animation
await Future.delayed(const Duration(milliseconds: 1000));
// Request system's tracking authorization dialog
final TrackingStatus status =
await AppTrackingTransparency.requestTrackingAuthorization();
setState(() => _authStatus = '$status');
}
}on PlatformException{
setState(() => _authStatus='PlatformExceiption was thrown');
}
uuid = await AppTrackingTransparency.getAdvertisingIdentifier();
}
광고 관련된 getadvertisingidentifier도 생뚱맞게 아래에 선언만 되어있다. 오류 내용중에도 광고관련 신원확인 코드 잘못되었다는 문구가 있었던것같아서 이를 Return 해줘야하나 싶어
(코드가 잘못 설정되어있으니 신원확인이 안되서 광고수익이 많이 안나온건가 싶었다..)
최종코드는 아래와 같다.
String uuid="";
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) => initATT()); //앱추적
getPackageInfo();
_verifyVersion();
super.initState();
}
Future initATT() async { //앱추적
try {
final TrackingStatus status = await AppTrackingTransparency.trackingAuthorizationStatus;
setState(() => _authStatus = '$status');
// If the system can show an authorization request dialog
if(status==TrackingStatus.authorized){
final uuid = await AppTrackingTransparency.getAdvertisingIdentifier();
return uuid;
} else if (status == TrackingStatus.notDetermined) {
// Show a custom explainer dialog before the system dialog
//await showCustomTrackingDialog(context);//다이알로그
// Wait for dialog popping animation
await Future.delayed(const Duration(milliseconds: 1000));
final uuid = await AppTrackingTransparency.getAdvertisingIdentifier();
// Request system's tracking authorization dialog
final TrackingStatus status = await AppTrackingTransparency.requestTrackingAuthorization();
setState(() => _authStatus = '$status');
}
}on PlatformException{
setState(() => _authStatus='PlatformExceiption was thrown');
}
앱 심사결과를 기다려보자..
해결완료
한국시간 기준으로 점심때쯤 재심사를 제출했다.
버전코드 2로 해서 다시 빌드올리고, ATT가 뜨는 팝업화면 캡처본과 정중한 심사에 대한 영어 답변과 함께 재심사 요청을 했다. (매번 느끼는거지만 재심사 요청시 문구작성은 아무래도 통과에 도움된다고 생각한다. 예쁘게 말하는 사람에게 함부로 침 못뱉듯이..)
오후6시쯤 재심사 진행되더니 결과는 성공이다! 심사 통과 완료!
'App Dev > Flutter' 카테고리의 다른 글
[flutter] colors.white가 연보라색으로 보일때 해결법 (0) | 2024.10.28 |
---|---|
[Flutter] flutter admob 광고 다는 방법(android,ios 셋팅방법) (0) | 2024.08.13 |
[Flutter] Module '~' not found on xcode while using flutter 오류해결방법 (0) | 2023.10.16 |
[Flutter] snackbar 사용코드 /showSnackBar 오류수정하기 (0) | 2023.05.19 |
[Flutter] lib폴더안에 있는 파일 모두 빨간줄이면(dart sdk path 재설정하기) (0) | 2023.05.19 |
댓글