React Native/IOS

[React Native / iOS] iOS 15 이상에서 추적 요청 팝업 띄우기 (app tracking transparency)

Juzero 2022. 1. 12. 14:59

안녕하세요.

 

앱 추적 요청에 관한 이전 포스팅에 이어서 내용을 이어가겠습니다.

 

시뮬레이터에서는 되는데, 실제 기기에서는 안되는 이유를 몰라서 4시간동안 삽질했습니다..

커밋 메시지의 빡침이 느껴지시나요;

 

알고보니, iOS 15.0 이상에서는 앱 상태가 반드시 'acitve'일 때만 팝업이 뜨도록 변경되었습니다 ^^;;;

 

 

그럼 바로 알아보도록 하겠습니다.

 

 

이전 포스팅에 사용한 라이브러리는 앱 추적 요청에 관한 것만 있었는데요, 이번에 사용할 라이브러리는 거의 모든 권한에 대한 기능이 들어있습니다. (star 수도 더 많네요 ㅎㅎ)

 

https://github.com/zoontek/react-native-permissions

 

위 라이브러리를 사용할 예정입니다. 깃헙 설명만 봐도 되긴하지만, 조금 수정이 필요한 부분이 있습니다. 

 

 


 

 

 

1. 라이브러리를 설치합니다.

 

npm install --save react-native-permissions

 

 

2. Podfile을 수정합니다.

 

밑에 두 줄을 Podfile에 직접 추가한 후에,  pod install을 실행해주세요. 

 

target 'YourProjectName' do 

...

  permissions_path = '../node_modules/react-native-permissions/ios'

  pod 'Permission-AppTrackingTransparency', :path => "#{permissions_path}/AppTrackingTransparency"
  
...
  
end

 

 

3. App.js에서 아래 코드를 추가합니다.

 

(따로 최상단파일을 설정하셨으면 거기서 추가하면 됩니다.)

 

 

설치한 라이브러리 import 합니다. 

import {request, PERMISSIONS} from 'react-native-permissions';

 

'react-native'에서 아래 두개도 import합니다.

import { AppState, Platform } from 'react-native';

 

아래 코드를 App함수(또는 클래스) 내에 추가합니다. 

저는 함수형 코드를 사용합니다. 클래스형 코드를 사용하시는 분들은 아래 코드와 조금 다를 수 있습니다. 

  useEffect(() => {
    const listener = AppState.addEventListener('change', (status) => {
      if (Platform.OS === 'ios' && status === 'active') {
        request(PERMISSIONS.IOS.APP_TRACKING_TRANSPARENCY)
          .then((result) => console.warn(result))
          .catch((error) => console.warn(error));
      }
    });

    return () => {listener.remove()}
  }, []);

 

이전 포스팅과 다르게 앱의 상태를 판단하는 코드가 추가되었습니다. 

 

라이브러리의 깃헙에 소개된 코드와는 listener.remove()부분이 조금 다를 거에요. 깃헙에 적힌대로 실행하면 에러가 발생합니다. 

 

result는 5가지 중에 하나로 return됩니다. 

  • unavailable: 안드로이드 폰이거나 iOS 14 미만 버전임.
  • blocked: 추적요청을 거절하였고, 다시 요청할 수 없음.
  • denied: 추적 요청으 거절되었지만 다시 요청할 수 있음.
  • granted: 추적 요청 허용함.
  • limited: 추적 요청을 허용했지만 일부분만 허용함.

 


 

Xcode에서 다시 실행해보면... 

 

 

 

잘됩니다 ㅠㅠㅠㅠㅠ

 

앱 키자마자 바로뜨네요 :)

 

 

그럼 포스팅 끝!