신규 주산 앱은 IAB(In-App Billing), 즉 게임내 유료 구매 아이템 없이 서비스하기로 기획했습니다.
나중에 컨텐츠가 어느정도 추가되면 유료 앱을 별도로 내려고요.
유료 구매 아이템 대신 광고를 붙이기로 해서, 열심히 UnityAds를 구현하고 있었습니다.
Interstitial Ad, Rewarded Ad 두 개를 상황에 맞게 띄워주도록 작업했는데요.
유니티 Dashboard 에 가서 Ads setting 설정 작업중에 [ Missing SKAdNetwork Ids from Info.plist ] 라는 내용이 보이네요.
검색해보니 iOS에서 광고를 위한 식별자를 막으면서 대신으로 제공하는 기능이라고 합니다.
요새 아이폰에서 앱을 설치하고 실행하면 뜨는, 사용자 활동 추적과 관계된 내용인가봅니다.
iOS 빌드하기 전에 XCode 에서 Info.plist 파일을 편집해야 한다고 하는데요.
유니티 빌드 -> XCode 실행 -> (XCode 작업) -> XCode 최종 빌드
과정에서 중간의 (XCode 작업)이 들어가면 추후 패치 빌드시 자꾸 귀찮아질 것 같습니다.
예전에 얼핏 봐 두었던 유니티 에디터 빌드 PostProcessBild 가 기억나서 관련 코드를 찾아봤습니다.
ATT 관련된 일본 개발자의 포스트가 있었는데요. 아주 잘 정리되었고 코드를 복사해다가 붙여넣으면 되겠구나 싶었는데...
작업하기 전에 유니티 Dashboard를 꼼꼼하게 살펴보니 개발자를 위한 포스트 링크가 있네요.
결과적으로 유니티 Dashboard에 올라온 페이지를 보고 따라 구현하면 되는거였습니다. (빙고!)
(일본 개발자의 포스트 : https://qiita.com/tetr4lab/items/0b27fb4d2bcaa19ead79)
유니티 제공 포스트를 보며, 아래와 같이 따라 작업하면 됩니다.
https://unityads.unity3d.com/help/monetization/ios14#ad-network-ids
1. Upgrading your Unity Ads SDK
Installing iOS 14 support package - 유니티 PackageManager에서 iOS 14 Advertising Support 패키지를 설치
2. Ad network IDs
Including ad network IDs in Unity - 빌드해서 XCode에 가보면 Info.plist 파일에 SKAdNetworkItems 가 등록되어 있음
3. App Tracking Transparency
3-1. Displaying an ATT context screen - iOS ATT 확인 화면을 띄우기 전에 보여줄 화면 + ATT 확인 화면 실행 코드
: 유니티에서는 iOS ATT 확인 화면을 띄우기 전에 사용자들에게 설명문을 보여주도록 권장하고 있습니다. 하지만 언어별로 구현해야해서 저는 그냥 스킵...
3-2. Displaying an ATT permission request - 애플의 ATT 가이드라인을 통과하기 위해서, Info.plist에 NSUserTrackingUsageDe scrip tion을 추가
(사용자에게 앱 사용/실행시 권한을 요청하는 기능이 왜 들어가는지에 대한 간단한 설명)
3-3. Implementing an ATT permission request in Unity - iOS 앱 실행시 ATT 확인 화면을 띄우는 코드 구현 (3-1의 샘플 코드 안에는 미리 구현되어 있음)
어려움 없이 구현이 끝나고 작업 컴퓨터에서 잘 실행되는 것을 확인했습니다.
주로 테스트하는 안드로이드 디바이스에도 apk 빌드해서 실행하고 잘 되는 상황이었는데요.
빌드창에서 환경을 iOS 로 바꾸고 빌드하니 빌드 에러가 발생합니다.
Assets/Editor/PostBuildStep.cs(2,19): error CS0234: The type or namespace name 'Callbacks' does not exist in the namespace 'UnityEditor' (are you missing an assembly reference?)
using UnityEditor;
using UnityEditor.Callbacks;
#if UNITY_IOS
using UnityEditor.iOS.Xcode;
#endif
using System.IO;
[현상]
- iOS 빌드 환경에서 UnityEdiitor 에러 발생
[문제 해결 과정]
- 해당 파일을 Assets > Editor 폴더에 저장 - 에러 발생
- using UnityEditor; using UnityEditor.Callbacks; 를 #if UNITY_EDITOR #endif 로 둘러줌 - 에러 발생
- Assets > Editor 폴더의 Editor.asmdef 파일에 Unity.Advertisement, Unity.Advertisement.IosSupport 등을 등록하고 apply 적용 - 에러 발생
- Assets > Editor 폴더의 Editor.asmdef 파일에 UnityEngine.Advertisements 들을 등록하고 apply 적용 - 에러 발생
- Assets > Script 폴더의 Script.asmdef 파일에 위 두 작업을 동일하게 적용 - 에러 발생
아이구 답답하고 속터져라 노래를 부르며 잠시 쉴 겸 구글링하는데, 아래 포스트를 발견했습니다.
https://sanctacrux.tistory.com/670
본문을 내리다보니 아래 내용이 보이네요.
--------------------
UnityEditor iOS 플러그인
import
Project - Edit Reference - .NET Assembly 탭 - Browse - UnityEditor.iOS.Extensions.Xcode.dll 추가
Xcode 자동 설정 (Plugin/iOS/Editor/XcodeSettingsPostProcesser.cs)
--------------------
어? XcodeSettingsPostProcesser.cs 파일을 Assets > Editor 가 아니라 Assets > Plugins > iOS > Editor 폴더에 넣으라고 나와있네요.
- Assets > Plugins > iOS > Editor 폴더를 만들고 해당 파일을 넣어서 빌드 - 빌드 성공
[추가 정보]
Dashboard 내용에는 설정할 내용들이 좀 더 있는데요.
app-ads.txt 파일 서버 업로드도 필요합니다. (애플용 ATT나 광고 매출에 영향을 줄 수 있는 app-ads.txt 파일 모두 선택사항입니다. 필수 구현은 아님)
저는 개인 홈페이지 호스팅 서버가 있어서, 여기에 파일을 올려서 쉽게 처리했습니다.
개인사업자이고 홈페이지 서버가 따로 없으면 구글 Blogger 에서 무료로 해결하시더군요.
[알게 된 내용]
XCode의 Info.plist 수정 작업이 필요할 경우, 유니티에서 PostProcess 코드를 작성해서 자동화(?)할 수 있습니다.
유니티에서 제공하는 포스트를 보며 작업하다, 3-2. Displaying an ATT permission request 부분에서 소스 코드를 추가하게 되는데요.
Editor와 관련된 이 소스 코드 파일을 Assets > Plugins > iOS > Editor 폴더에 넣으면 됩니다.
(더 구글링하다보니 Assets > Editor > iOS 폴더에 넣는다는 사람도 있네요. 이 내용은 테스트해보진 않았습니다. 전 지금 녹초가 되었거든요. 헥헥)
SkAdNetworkList 나 app-ads.txt 의 내용은 추후 추가될 수 있다고 하네요.
가끔 업데이트되는 내용이 있는지 확인하고, 추가된 내용이 있으면 반영해야 하겠습니다.
이제 개발은 끝났습니다.
다음 주에는 앱 마켓 등록 페이지에 올릴 홍보용 이미지, 문구들을 준비해야겠네요.
동시에 한 주 동안 안드로이드 아이폰 실기 플레이 테스트를 진행할 예정인데요.
부족하다 싶으면 컨텐츠를 조금 더 넣어야 할 지도 모르겠습니다.
8월 말까지는 오픈하고 좀 쉬고 싶은데 어떨지... 두근두근하네요.