Unity SDK
SDK ์ค์น
์์ด๋ธ๋ฆฟ์ง ์ ๋ํฐ SDK๋ ์ต์
2018.4
๋ฒ์ ์ด์์ ์ ๋ํฐ ๋ฒ์ ์ ํ์๋ก ํฉ๋๋ค.
์์ด๋ธ๋ฆฟ์ง ์ ๋ํฐ SDK๋
unity-jar-resolver
(External Dependency Manager for Unity)๋ฅผ ํตํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ข ์์ฑ์ ๊ด๋ฆฌํ๊ณ ์์ต๋๋ค.
Airbridge Unity SDK 1.9.3 ๋ฏธ๋ง์ ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ค์ ํ์ด์ง๋ฅผ ํตํด ๋ฏธ๋ฆฌ ํด๋น ์ ๋ํฐ ํจํค์ง ์ค์ ์ ์๋ฃํด ์ฃผ์ธ์.Airbridge Unity SDK 1.9.3 ์ด์์ ๋ฒ์ ๋ถํฐ๋ Airbridge Plugin ๊ณผ EDM4U ์์ ์ ๋ชจ๋ ์๋์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์ ๋ํฐ ํจํค์ง ์ค์ ์ ํ์ค ํ์๊ฐ ์์ต๋๋ค.
ํจํค์ง ์ค์น
- ์ต์ ๋ฒ์ ์ Airbridge Unity SDK๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์์ฃผ์ธ์.
- ์ ๋ํฐ ์๋จ์
Assets > Import Package > Custom Package ...
๋ฅผ ํด๋ฆญํ์ฌ ํจํค์ง๋ฅผ ์ถ๊ฐํด ์ฃผ์ธ์. - ์ค์น๊ฐ ์๋ฃ๋๋ฉด ์ ๋ํฐ ์๋จ์
AB180
ํญ์ ํ์ธ ํ์ค ์ ์์ต๋๋ค.
ํ๋ก์ ํธ ์ค์
์ ๋ํฐ ์๋จ์ AB180 > Airbridge Settings
๋ฅผ ํด๋ฆญํ์๋ฉด ์๋์ ๊ฐ์ ํ๋ฉด์ ํ์ธ ํ ์ ์์ต๋๋ค.
ํ๋ ์ ๋ ฅ ์๋ฃ ํ ์ ์ฉ์ ์ํด
Update iOS App Setting
ํน์Update Android Manifest
๋ฅผ ๋ฐ๋์ ๋๋ฌ์ฃผ์ธ์.
Android Manifest
ํ์ผ์ ์ฌ์ฉ์๊ฐ ์ง์ Merge ์์ ์ ์ํํ ๊ฒฝ์ฐ,Project > Plugins > Airbridge > Android > AndroidManifest.xml
ํ์ผ์ ์ฐธ์กฐํ์ฌ ์ฃผ์ธ์.
์ฑ ์ ๋ณด ์ค์
์ ๋ํฐ ์๋จ์ AB180 > Airbridge Settings
์ App Name
๋ฐ App Token
ํ๋์ ๋์๋ณด๋์์ ์ค์ ๋ ์ฑ ์ด๋ฆ (Unique ID)
๊ณผ ์ฑ SDK ํ ํฐ ์ ๋ณด
๋ฅผ ๊ฐ๊ฐ ์
๋ ฅํด ์ฃผ์ธ์.
ํด๋น ์ ๋ณด๋ Airbridge ๋์๋ณด๋์ โ Settings
โ Tokens
ํญ์์ ํ์ธํ์ค ์ ์์ต๋๋ค.

์ด๊ธฐํ
Airbridge Unity SDK์ ๊ฒฝ์ฐ ๋ณ๋์ ์ด๊ธฐํ ์์ ์ ํ์๋ก ํ์ง ์์ผ๋ ํน์ํ ๊ฒฝ์ฐ ๊ฐ ํ๋ซํผ๋ง๋ค ๋ณ๋์ ๋ง์ด๊ทธ๋ ์ด์ ์์ ์ด ํ์ํ ์๋ ์์ต๋๋ค.
SDK ์ค์น ํ์ธ
์์ด๋ธ๋ฆฟ์ง SDK์ ๊ธฐ๋ณธ ์ค์น ๋ฐ ์ค์ ์ด ์๋ฃ ํ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ๋ค์ ํตํด์ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์๋์ง ํ์ธํ์ค ์ ์์ต๋๋ค.
๋ก๊ทธ๋ก ํ์ธ
ํด๋น ์ฑ์ ์์ธํ ๋ก๊ทธ ์ ๋ณด๋ฅผ ํ์ธํ๊ณ ์ถ์ผ์ ๊ฒฝ์ฐ, ์ ๋ํฐ ์๋จ์ AB180 > Airbridge Settings
์ Log Level
ํ๋ ์ค์ ์ ํตํ์ฌ ํ์ธํ์ค ์ ์์ต๋๋ค.
๋์๋ณด๋์์ ํ์ธ
์ค์ ์ด ์๋ฃ๋๋ฉด ์ดํ๋ฆฌ์ผ์ด์
์ค์น ํ Airbridge ๋์๋ณด๋์ โ Raw Data
โ App Real-time Log
ํญ์์ ํด๋น ์ดํ๋ฆฌ์ผ์ด์
์ ์ด๋ฒคํธ๋ฅผ ํ์ธํ์ค ์ ์์ต๋๋ค.
Real-time Log๋ ์ต์ฅ 5๋ถ์ ์ง์ฐ์๊ฐ์ด ์์ ์๋ ์์ต๋๋ค.
๋ฅ๋งํฌ ์ค์
๋์๋ณด๋ ์ค์
๊ฐ๊ฐ iOS ๋ฐ Android ํ๋ซํผ ๋ณ ๋ฅ๋งํฌ ๋์๋ณด๋ ์ค์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- iOS ๋ฅ๋งํฌ ๋์๋ณด๋ ์ค์ ๋ฐ๋ก ๊ฐ๊ธฐ
- Android ๋ฅ๋งํฌ ๋์๋ณด๋ ์ค์ ๋ฐ๋ก ๊ฐ๊ธฐ
ํ๋ก์ ํธ ์ค์
iOS ๋ฅ๋งํฌ ์ค์
์ ๋ํฐ ์๋จ์ AB180 > Airbridge Settings
์ iOS URI Scheme
ํ๋์ ๋์๋ณด๋์์ ์ค์ ๋ iOS URI Scheme
์ ๋ณด๋ฅผ ์
๋ ฅํด ์ฃผ์ธ์.
ํด๋น ์ ๋ณด๋ Airbridge ๋์๋ณด๋์ โ Tracking Link
โ Deep Link
ํญ์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
Android ๋ฅ๋งํฌ ์ค์
์ ๋ํฐ ์๋จ์ AB180 > Airbridge Settings
์ Android URI Scheme
ํ๋์ ๋์๋ณด๋์์ ์ค์ ๋ Android URI Scheme
์ ๋ณด๋ฅผ ์
๋ ฅํด ์ฃผ์ธ์.
ํด๋น ์ ๋ณด๋ Airbridge ๋์๋ณด๋์ โ Tracking Link
โ Deep Link
ํญ์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
์ปค์คํ
๋๋ฉ์ธ ์ค์
Airbridge ๋์๋ณด๋์์ ํธ๋ํน ๋งํฌ๋ฅผ ์์ฑํ๊ฒ ๋๋ ๊ฒฝ์ฐ deeplink.page
ํน์ abr.ge
ํํ์ ํธ๋ํน ๋งํฌ๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง, ๊ณ ๊ฐ์ฌ์์๋ ํธ๋ํน ๋งํฌ์ ๋ธ๋๋ฉ ๋ฐ ํด๋ฆญ๋ฅ (CTR)์ ํฅ์์ ์ํด ๋ค์๊ณผ ๊ฐ์ ์ค์ ์ ํตํด go.my_company.com/abcd
์ ๊ฐ์ด ์ปค์คํฐ๋ง์ด์ฆ ๋ URL์ ํธ๋ํน ๋งํฌ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
-
์ฌ์ฉํ ์ปค์คํ ๋๋ฉ์ธ์ ๋ค์ ๊ฐ์ด๋์ ๊ฐ์ด ์ค์ ํด ์ฃผ์ธ์.
-
์์ ์ค์ ํ ์ปค์คํ ๋๋ฉ์ธ ์ฃผ์๋ฅผ ์ ๋ํฐ ์๋จ์
AB180 > Airbridge Settings
์Custom Domain
ํ๋์ ์ ๋ ฅํด ์ฃผ์ธ์.
๋ฅ๋งํฌ ์ฝ๋ฐฑ ์ค์
์ ์ ๊ฐ ํด๋ฆญํ ๋ฅ๋งํฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ก๋ฐ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ด ๋ฉ์์ง๋ฅผ ๋ฐ๊ธฐ ์ํ ์ค๋ธ์ ํธ๋ช ์ ๋ฑ๋กํด ์ฃผ์ธ์.
private void Awake()
{
AirbridgeUnity.SetDeeplinkCallback("AirbridgeManager");
}
์์ ๊ฐ์ด Callback
์ ๋ฑ๋กํ๊ฒ ๋๋ฉด ํด๋น ํด๋์ค๋ ๋ค์๊ณผ ๊ฐ์ ํจ์๋ฅผ ํตํด ๋ฅ๋งํฌ URL์ ๋๊ฒจ๋ฐ๊ฒ ๋ฉ๋๋ค.
using UnityEngine;
public class AirbridgeManager : MonoBehaviour
{
private void Awake() {
Airbridge.SetDeeplinkCallback("AirbridgeManager");
}
// Method will call by Airbridge when deeplink detected
private void OnTrackingLinkResponse(string url)
{
}
}
Airbridge Unity๋ ๋ด๋ถ์ ์ผ๋ก Unity์์ ์ ๊ณตํ๋
UnitySendMessage
๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ ๋ฅ๋งํฌ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ณ ์์ต๋๋ค.
๋ฅ๋งํฌ ์ค์ ํ์ธ
Airbridge Unity SDK์ ๋ฅ๋งํฌ ์ค์ ์ด ์๋ฃ ํ ๋ค์๊ณผ ๊ฐ์ ๋งํฌ๋ค์ ํตํ์ฌ ํด๋น ๋ชจ๋ฐ์ผ ์ฑ์ ํ์ด์ง๋ก ์ฌ๋ฐ๋ฅด๊ฒ ์ด๋ ๋๋์ง ํ์ธํ์ค ์ ์์ต๋๋ค.
scheme://
๋ฅ๋งํฌ ์ค์ ๋ฐ ํ์ธ์ด ์๋ฃ๋๋ฉด Airbridge ๋์๋ณด๋ โ Raw Data
โ App Real-time Log
ํญ์์ ๋ค์๊ณผ ๊ฐ์ด ํ์ธํ์ค ์ ์์ต๋๋ค.
์ฌ์ฉ์ ์ค์
์ฌ์ฉ์ ์๋ณ์ ๋ฐ ์ค์
Airbridge์์๋ ์น(Web)๊ณผ ์ฑ(App)๊ฐ์ ํํธํ๋ ์ฌ์ฉ์์ ๊ธฐ์ฌ๋ ์ธก์ ์ ์ํด ๋ค์๊ณผ ๊ฐ์ ์ฌ์ฉ์์ ์๋ณ์ ์ ๋ณด๋ค์ ์์งํฉ๋๋ค.
- User Email : ์ด๋ฉ์ผ
- User Phone : ์ ํ๋ฒํธ
- User ID : ์ฌ์ฉ์ ๊ณ ์ ID (์ฌ์ฉ์์ ํน์ ํ ์ ์๋ ID ๊ฐ์ผ๋ก ์น๊ณผ ์ฑ์์ 1:1๋ก ๋์๋์ด์ผ ํฉ๋๋ค)
- User Alias : ์ฌ์ฉ์๋ฅผ ๋ํ๋ผ ์ ์๋ ๊ธฐํ ID (e.g. ๋ก์ดํฐ ํ๋ก๊ทธ๋จ์ฉ ID, ๊ณ์ด์ฌ ํตํฉ ID ๋ฑ๋ฑ)
์ ๋ ฅ๋์ด์ง ์ฌ์ฉ์์ ์ด๋ฉ์ผ๊ณผ ์ ํ๋ฒํธ๋ ์๋์ผ๋ก ํด์ํ(SHA256)๋์ด ์๋ฒ๋ก ์ ์ก๋์ด ์ง๋๋ค.
Airbridge Unity SDK์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ํตํด ์ฌ์ฉ์์ ์๋ณ์ ์ ๋ณด๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
Dictionary<string, string> alias = new Dictionary<string, string>();
AirbridgeUser user = new AirbridgeUser();
user.SetId(UserId);
user.SetEmail(Email);
user.SetPhoneNumber(Phone);
user.SetAlias(alias);
AirbridgeUnity.SetUser(user);
- User Alias์ ๊ฐ์๋
์ต๋ 10๊ฐ
์ ๋๋ค.- User Alias์ key ๋
String ํ์
์ด๋ฉฐ, ๊ธธ์ด๋์ต๋ 128์
์ ๋๋ค.- User Alias์ key ๋
^[a-z_][a-z0-9_]*$ ์ ๊ท์
์ ๋ง์กฑํด์ผ ํฉ๋๋ค.- User Alias์ value ๋
String ํ์
์ด๋ฉฐ String์ ๊ฒฝ์ฐ์ต๋ 128์
์ ๋๋ค.
์ฌ์ฉ์์ ์๋ณ์ ์ ๋ณด๋ฅผ ํ๋ฒ ์ค์ ํ๊ฒ ๋๋ฉด ๋ชจ๋ ์ด๋ฒคํธ์ ํด๋น ์๋ณ์ ์ ๋ณด๊ฐ ํจ๊ป ํฌํจ๋์ด ์ ๋ฌ๋ฉ๋๋ค.
์ฌ์ฉ์ ์์ฑ ์ค์
MTA(Multi-Touch Attribution) ๋ถ์์ ์ ํ๋ ํฅ์, ๋ด๋ถ ๋ฐ์ดํฐ ๋ถ์, ์๋ํํฐ(3rd Party) ์๋ฃจ์ ์ฐ๋ ๋ฑ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ์์ ์ถ๊ฐ ์์ฑ ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
Dictionary<string, object> attrs = new Dictionary<string, object>();
AirbridgeUser user = new AirbridgeUser();
user.SetAttributes(attrs);
AirbridgeUnity.SetUser(user);
- User Attribute์ ๊ฐ์๋
์ต๋ 100๊ฐ
์ ๋๋ค.- User Attribute์ key ๋
String ํ์
์ด๋ฉฐ, ๊ธธ์ด๋์ต๋ 128์
์ ๋๋ค.- User Attribute์ key ๋
^[a-z_][a-z0-9_]*$ ์ ๊ท์
์ ๋ง์กฑํด์ผ ํฉ๋๋ค.- User Attribute์ value ๋
Integer, Float, Long, Boolean ํ์
๊ณผString ํ์
์ด๋ฉฐ String์ ๊ฒฝ์ฐ์ต๋ 1024์
์ ๋๋ค.
์ฌ์ฉ์ ์ค์ ํ์ธ
Airbridge Unity SDK์์ ์ค์ ํ ์ ์ ์ ๋ณด๋ Airbridge ๋์๋ณด๋ โ Raw Data
โ App Real-time Log
ํญ์์ ๋ค์๊ณผ ๊ฐ์ด ํ์ธํ์ค ์ ์์ต๋๋ค.
๋๋ฐ์ด์ค ์ค์
๋๋ฐ์ด์ค ์๋ณ์ ์ค์
SDK์ ๋๋ฐ์ด์ค ์๋ณ์ ์ ๋ณด๋ฅผ ์ค์ ํด ์ดํ ์์ง๋๋ ๋ชจ๋ ์ด๋ฒคํธ์ ๋๋ฐ์ด์ค ์๋ณ์ ๋ณด๋ฅผ ํฌํจ์ํฌ ์ ์์ต๋๋ค. ๋๋ฐ์ด์ค ์๋ณ์๊ฐ ์ค์ ๋๋ฉด ๋ณ๋๋ก ์ญ์ ํ์ง ์์ ๊ฒฝ์ฐ ์ฑ ์ข ๋ฃ ์ฌ๋ถ์ ๊ด๊ณ์์ด ๊ณ์ ์ ์ง๋ฉ๋๋ค.
AirbridgeUnity.SetDeviceAlias("ADD_YOUR_KEY", "AND_YOUR_VALUE");
AirbridgeUnity.RemoveDeviceAlias("DELETE_THIS_KEY");
AirbridgeUnity.ClearDeviceAlias();
๋ฉ์๋ | ์ค๋ช |
---|---|
SetDeviceAlias(string key, string value) | ์ ๋ฌํ Key์ Value ์์ ๋๋ฐ์ด์ค ์๋ณ์์ ์ถ๊ฐํฉ๋๋ค. |
RemoveDeviceAlias(string key) | ์ ๋ฌํ Key์ ํด๋นํ๋ ๋๋ฐ์ด์ค ์๋ณ์๋ฅผ ์ญ์ ํฉ๋๋ค. ํด๋นํ๋ ์๋ณ์๊ฐ ์์ ๊ฒฝ์ฐ ์๋ฌด๋ฐ ๋์์ ํ์ง ์์ต๋๋ค. |
ClearDeviceAlias() | ๋ชจ๋ ๋๋ฐ์ด์ค ์๋ณ์๋ฅผ ์ญ์ ํฉ๋๋ค. |
์ด๋ฒคํธ ์ค์
Airbridge Unity SDK์์ ํธ์ถํ๋ ๋ชจ๋ ์ด๋ฒคํธ๋ค์ ๋ค์๊ณผ ๊ฐ์ด 6๊ฐ์ ํ์ ์์ฑ ๊ฐ๋ค๊ณผ ํจ๊ป ์ ์กํ ์ ์์ต๋๋ค.
- Event Category : ์ด๋ฒคํธ์ ์ด๋ฆ
Required
(string) - Event Action : ์ด๋ฒคํธ ํ์ ์์ฑ๊ฐ 1 (string)
- Event Label : ์ด๋ฒคํธ ํ์ ์์ฑ๊ฐ 2 (string)
- Event Value : ์ด๋ฒคํธ ํ์ ์์ฑ๊ฐ 3 (double)
- Event Custom Attributes : ์ด๋ฒคํธ ํ์์ ์ปค์คํ ๋ฐ์ดํฐ (Dictionary<string, object>)
- Event Semantic Attributes : ์ด๋ฒคํธ ํ์์ ์๋ฉํฑ ๋ฐ์ดํฐ (Dictionary<string, object>)
์ฌ์ฉ์ ์ด๋ฒคํธ ์ ์ก
Airbridge Unity SDK์์๋ ํธ์๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ 3๊ฐ์ง ์ ์ ์ด๋ฒคํธ๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
- ํ์๊ฐ์ (Sign up)
Dictionary<string, string> alias = new Dictionary<string, string>();
AirbridgeUser user = new AirbridgeUser();
user.SetId(UserId);
user.SetEmail(Email);
user.SetPhoneNumber(Phone);
user.SetAlias(alias);
AirbridgeUnity.SetUser(user);
AirbridgeEvent = new AirbridgeEvent(Airbridge.Constants.CATEGORY.SIGN_UP);
AirbridgeUnity.TrackEvent( );
- ๋ก๊ทธ์ธ (Sign in)
Dictionary<string, string> alias = new Dictionary<string, string>();
AirbridgeUser user = new AirbridgeUser();
user.SetId(UserId);
user.SetEmail(Email);
user.SetPhoneNumber(Phone);
user.SetAlias(alias);
AirbridgeUnity.SetUser(user);
AirbridgeEvent = new AirbridgeEvent(Airbridge.Constants.CATEGORY.SIGN_IN);
AirbridgeUnity.TrackEvent( );
- ๋ก๊ทธ์์ (Sign out)
AirbridgeEvent = new AirbridgeEvent(Airbridge.Constants.CATEGORY.SIGN_OUT);
AirbridgeUnity.TrackEvent( );
AirbridgeUnity.ExpireUser();
์ด์ปค๋จธ์ค ์ด๋ฒคํธ ์ ์ก
Airbridge Unity SDK์์๋ ํธ์๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ ์ํ ํด๋์ค์ ํจ๊ป ์ด์ปค๋จธ์ค ์ด๋ฒคํธ๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
- ํ ํ๋ฉด (Home Screen)
AirbridgeEvent = new AirbridgeEvent(Airbridge.Constants.CATEGORY.VIEW_HOME);
AirbridgeUnity.TrackEvent( );
- ๊ฒ์ ๊ฒฐ๊ณผ ์กฐํ (Search Results)
List<Airbridge.Ecommerce.Product> beverages = new List<Airbridge.Ecommerce.Product>();
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
beverages.Add(cocacola);
Airbridge.Ecommerce.Product fanta = new Airbridge.Ecommerce.Product();
fanta.SetId("beverage_2");
fanta.SetName("Fanta");
fanta.SetPrice(10.99);
fanta.SetCurrency("USD");
fanta.SetQuantity(1);
fanta.SetPosition(1);
beverages.Add(fanta);
AirbridgeEvent = new AirbridgeEvent(Airbridge.Constants.CATEGORY.VIEW_SEARCH_RESULT);
.SetQuery("SELECT * FROM beverages");
.SetProducts(beverages.ToArray());
.SetTotalValue(12.24);
AirbridgeUnity.TrackEvent( );
- ์ํ ๋ฆฌ์คํธ ์กฐํ (Product List)
List<Airbridge.Ecommerce.Product> beverages = new List<Airbridge.Ecommerce.Product>();
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
beverages.Add(cocacola);
Airbridge.Ecommerce.Product fanta = new Airbridge.Ecommerce.Product();
fanta.SetId("beverage_3");
fanta.SetName("Fanta");
fanta.SetPrice(10.99);
fanta.SetCurrency("USD");
fanta.SetQuantity(1);
fanta.SetPosition(2);
beverages.Add(fanta);
AirbridgeEvent = new AirbridgeEvent(Airbridge.Constants.CATEGORY.VIEW_PRODUCT_LIST);
.SetProductListId("beverage_list_0");
.SetProducts(beverages.ToArray());
.SetTotalValue(12.24);
AirbridgeUnity.TrackEvent( );
- ์ํ ์์ธ ํ์ด์ง ์กฐํ (Product Details)
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
AirbridgeEvent = new AirbridgeEvent(Airbridge.Constants.CATEGORY.VIEW_PRODUCT_DETAILS);
.SetProducts(cocacola);
AirbridgeUnity.TrackEvent( );
- ์ฅ๋ฐ๊ตฌ๋ ๋ด๊ธฐ (Add to Cart)
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
AirbridgeEvent = new AirbridgeEvent(Airbridge.Constants.CATEGORY.ADD_TO_CART);
.SetProducts(cocacola);
.SetTotalValue(1.25);
AirbridgeUnity.TrackEvent( );
- ๊ฒฐ์ ์๋ฃ (Order Complete)
List<Airbridge.Ecommerce.Product> beverages = new List<Airbridge.Ecommerce.Product>();
Airbridge.Ecommerce.Product cocacola = new Airbridge.Ecommerce.Product();
cocacola.SetId("beverage_1");
cocacola.SetName("Coca Cola");
cocacola.SetPrice(1.25);
cocacola.SetCurrency("USD");
cocacola.SetQuantity(1);
cocacola.SetPosition(0);
beverages.Add(cocacola);
Airbridge.Ecommerce.Product fanta = new Airbridge.Ecommerce.Product();
fanta.SetId("beverage_3");
fanta.SetName("Fanta");
fanta.SetPrice(10.99);
fanta.SetCurrency("USD");
fanta.SetQuantity(1);
fanta.SetPosition(2);
beverages.Add(fanta);
AirbridgeEvent = new AirbridgeEvent(Airbridge.Constants.CATEGORY.ORDER_COMPLETE);
.SetTransactionId("transaction_123");
.SetProducts(beverages.ToArray());
.SetInAppPurchased(true);
.SetTotalValue(12.24);
AirbridgeUnity.TrackEvent( );
์ปค์คํ
์ด๋ฒคํธ ์ ์ก
Airbridge Unity SDK์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ํตํด ์ปค์คํฐ๋ง์ด์ฆ ๋ ์ด๋ฒคํธ๋ฅผ ์ ์กํ ์ ์์ต๋๋ค.
AirbridgeEvent = new AirbridgeEvent("category");
.SetAction("action");
.SetLabel("label");
.SetValue(100.99);
.AddCustomAttribute("custom_key", "value");
.AddSemanticAttribute("query", "query_123");
AirbridgeUnity.TrackEvent( );
Semantic Attributes
๋ฅผ ์ง์ ๊ตฌ์ฑํ์ฌ ์ ๋ฌํ๊ธฐ ์ํด์๋ ๋ค์ ํ์ด์ง๋ฅผ ์ฐธ์กฐํด ์ฃผ์ธ์.
์ด๋ฒคํธ ์ ์ก ํ์ธ
Airbridge Unity SDK์์ ์ ์ก๋ ์ด๋ฒคํธ ์ ๋ณด๋ Airbridge ๋์๋ณด๋ โ Raw Data
โ App Real-time Log
ํญ์์ ๋ค์๊ณผ ๊ฐ์ด ํ์ธํ์ค ์ ์์ต๋๋ค.
๊ณ ๊ธ ์ค์
SDK Signature ์ค์
Airbirdge Unity SDK์์๋ ์ ๋ํฐ ์๋จ์ AB180 > Airbridge Settings
์ Sdk Signature Secret ID
ํ๋์ Sdk Signature Secret
ํ๋์ ์ค์ ์ ํตํด SDK ๋ฅผ SDK Spoofing ์ผ๋ก ๋ถํฐ ๋ณดํธํ ์ ์์ต๋๋ค.
SDK Signature ๋ฅผ ์ค์ ํ๊ธฐ ์ํด์๋ SDK Signature Secret, SDK Signature Secret ID 2๊ฐ์ง๊ฐ ํ์ํฉ๋๋ค.
ํด๋น 2๊ฐ์ง ๊ฐ์ ๋ฐ๊ธ๋ฐ๊ธฐ ์ํด์๋ ๋ด๋น ์์ด๋ธ๋ฆฟ์ง CSM ์๊ฒ ์ง์์ ์์ฒญํด์ฃผ์ธ์.
์ฌ์ฉ์ ์ ๋ณด ํด์ํ ์ค์
๋ด๋ถ์ ๋ฐ์ดํฐ ๋ถ์ ๋ฑ์ ๋ชฉ์ ์ ์ํด HASH(SHA256)ํ์ง ์๊ณ ์ฌ์ฉ์์ ์๋ณ์ ์ ๋ณด๋ฅผ ์ ์กํ๊ณ ์ถ์ ๊ฒฝ์ฐ, ์ ๋ํฐ ์๋จ์ AB180 > Airbridge Settings
์ User Info Hash Enabled
ํ๋์ ์ค์ ์ ํตํด User Email ๊ทธ๋ฆฌ๊ณ User Phone ์ ๋ณด์ ํด์ํ(SHA256)๋ฅผ ์ค๋จํ ์ ์์ต๋๋ค.
ํด๋น ์ต์ ์
User Email
๊ณผUser Phone
๋ฑ ๋ฏผ๊ฐํ ๊ฐ์ธ์ ๋ณด๋ฅผ ์ 3์์๊ฒ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋ด๋ถ์ ์ผ๋ก ๋ณ๋์ ๋ณด์ ์กฐ์น๊ฐ ์ ํ๋์ด์ ธ์ผ ํฉ๋๋ค.
์ธ์
ํ์์์ ์ค์
Airbirdge Unity SDK์์๋ ์ ๋ํฐ ์๋จ์ AB180 > Airbridge Settings
์ Session Timeout Seconds
ํ๋์ ์ค์ ์ ํตํด ์ค์ ๋ ์ธ์
์๊ฐ ๋ด์ ์ ์ ๊ฐ ์ฑ์ ์ฌ ์คํ ํ๋๋ผ๋ ๊ฐ์ ์ธ์
์ผ๋ก ํ๋จํ์ฌ ์ฑ ์คํ ์ด๋ฒคํธ๋ฅผ ๋ค์ ๋ณด๋ด์ง ์๋๋ก ํ ์ ์์ต๋๋ค.
๊ฐ์ธ์ ๋ณด๋ณดํธ ์ค์
ํด๋น ๊ธฐ๋ฅ์ GDPR์ด๋ CCPA์ ๊ฐ์ด ๊ณ ๊ฐ์ผ๋ก๋ถํฐ ๊ฐ์ธ์ ๋ณด๋ณดํธ์ ๋ํ ๋์๋ฅผ ๋ฐ์ ๋ฐ์ดํฐ ์์ง ๋ฐ ์ ์ก์ ์งํํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํ ๊ธฐ๋ฅ์ ๋๋ค.
์ ๋ํฐ ์๋จ์ AB180 > Airbridge Settings
์ Auto Start Tracking Enabled
ํ๋์ ์ค์ ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ ์์ง๊ณผ ์ ์ก์ ๋ช
์์ ์ผ๋ก ์์ํ ์ ์์ต๋๋ค.
ํด๋น ๊ธฐ๋ฅ์ ๋นํ์ฑํํ ๊ฒฝ์ฐ์ ๋ค์๊ณผ ๊ฐ์ ํจ์๋ฅผ ๋ช ์์ ์ผ๋ก ํธ์ถํด์ผ ์ฌ๋ฐ๋ฅด๊ฒ ๋ฐ์ดํฐ ์์ง์ด ์ด๋ฃจ์ด์ง๊ฒ ๋ฉ๋๋ค.
AirbridgeUnity.StartTracking();
Airbridge ๋งํฌ ์ถ์ ์ค์
๊ด๊ณ ์ฃผ์ ์ฑ ๋ด์์ ๋ค์์ ๋ฅ๋งํฌ ๋์์ผ๋ก ์ธํด Airbridge๋ฅผ ํตํ Re-engagement ์ฑ๊ณผ๋ฅผ ํ๋์ ํ์ธํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ, ์ ๋ํฐ ์๋จ์ AB180 > Airbridge Settings
์ Track Airbridge Link Only
ํ๋์ ์ค์ ์ ํตํ์ฌ Airbridge ๋ฅ๋งํฌ๋ฅผ ํตํด ๋ค์ด์จ ์ฑ๊ณผ๋ง ํํฐ๋งํ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค.
ํด๋น ๊ธฐ๋ฅ์ ํ์ฑํํ ๊ฒฝ์ฐ ์๋์ ์กฐ๊ฑด์ ๋ง์กฑํ ๋ฅ๋งํฌ๋ฅผ ํตํด ์ฑ์ด ์คํ ๋ ๊ฒฝ์ฐ์ ํํ์ฌ ๋ฅ๋งํฌ ์ฑ๊ณผ๋ก ์ธก์ ํฉ๋๋ค.
- ๋์๋ณด๋์ ๋ฑ๋ก๋ ํํ์ ๋ฅ๋งํฌ๋ฅผ ํตํด ์ฑ์ด ์คํ ๋ ๊ฒฝ์ฐ
airbridge.io
๋ฅ๋งํฌ๋ฅผ ํตํด ์ฑ์ด ์คํ ๋ ๊ฒฝ์ฐdeeplink.page
๋ฅ๋งํฌ๋ฅผ ํตํด ์ฑ์ด ์คํ ๋ ๊ฒฝ์ฐairbridge_referrer
query ์ ๋ณด๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ
์์น ์ ๋ณด ์์ง
Airbridge Unity SDK์์๋ ์ ๋ํฐ ์๋จ์ AB180 > Airbridge Settings
์ Location Collection Enabled
ํ๋์ ์ค์ ์ ํตํ์ฌ ์ ์ ์ ์์น ์ ๋ณด๋ฅผ ์์งํ ์ ์์ต๋๋ค.
์์น ์ ๋ณด๋ ํฉ๋ฒ์ ์ธ ๋ชฉ์ ๊ณผ ๋ฐฉ๋ฒ์ ํตํ์ฌ ์์ง๋์ด์ผ ํ๋ฏ๋ก ๋ณธ ๊ธฐ๋ฅ ์ฌ์ฉ์ ์ฃผ์๊ฐ ์๊ตฌ๋ฉ๋๋ค.
ํด๋น ๊ธฐ๋ฅ์ ์ค์ง ์๋๋ก์ด๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ ๊ถํ์ด
AndroidManifest.xml
์ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
ํ์ด์ค๋ถ ๋ํผ๋ ์ฑ๋งํฌ ์ค์
Facebook์ Deferred App Link๋ฅผ ์ ๋ํฐ ์๋จ์ AB180 > Airbridge Settings
์ Facebook Deferred App Link Enabled
ํ๋์ ์ค์ ์ ํตํ์ฌ Airbridge Unity SDK์์ ํจ๊ป ๋ฐ์ ๋ณด์ค ์ ์์ต๋๋ค.
ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋ฏธ๋ฆฌ Facebook SDK ์ค์ ์ด ์ ํ๋์ด์ ธ์ผ ํฉ๋๋ค.
์ฐธ์กฐ - https://developers.facebook.com/docs/unity/
์ฑ ์ถ์ ํ์ฉ ์ค์
iOS 14์ ์ ์ฑ
๋ณํ์ ๋ฐ๋ผ iOS์์ ์ฑ ์ถ์ ํ์ฉ ์ค์ (App Tracking Transparency)์ ํตํ์ฌ ์ฌ์ฉ์์๊ฒ ๋์๋ฅผ ์ป์ด์ผ ์ฌ๋ฐ๋ฅด๊ฒ IDFA
์ ๋ณด๋ฅผ ์์งํ ์ ์์ต๋๋ค.
Airbridge Unity SDK์์๋ ์ ๋ํฐ ์๋จ์ AB180 > Airbridge Settings
์ iOS Tracking Authorize Timeout Seconds
์ค์ ์ ํตํด ์ค์น ์ด๋ฒคํธ๋ฅผ ์ง์ฐํ์ฌ ์ฌ๋ฐ๋ฅด๊ฒ IDFA
๊ฐ ์ธ์คํจ ์ด๋ฒคํธ์ ํฌํจ๋๋๋ก ์ค์ ํ ์ ์์ต๋๋ค.
์ฑ ์ญ์ ์ถ์ ์ค์
์ฑ ์ญ์ ์ถ์ ์ค์ ์ Airbridge Unity SDK
v1.9.0
์ดํ ๋ฒ์ ๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
Uninstall Tracking ์ค์ ๋ฐฉ๋ฒ
Android Uninstall Tracking
1. Firebase Cloud Messaging ์ค์
Firebase Cloud Messaging ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฑ์ ๊ธฐ๋ณธ ์ค์ ์ ์๋ฃํด ์ฃผ์ธ์.
2. Firebase Push Token ์ ์ก
Firebase Cloud Messaging ์ค์ ์ ํตํด ์์ฑ๋์ด์ง๋ Push Token์ ๋ค์ ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ ๋ฌํด ์ฃผ์ธ์.
public void Start() {
Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}
public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) {
#if UNITY_ANDROID
AirbridgeUnity.RegisterPushToken(token.Token);
#endif
}
// ๋ค์๊ณผ ๊ฐ์ ์ฒ๋ฆฌ๋ฅผ ์ถ๊ฐํ์ฌ ์ฑ ์ญ์ ์๋ฆผ์ธ ๊ฒฝ์ฐ ์ฌ์ฉ์์๊ฒ ๋
ธ์ถ๋์ง ์์ ์ ์๋๋ก ์์ธ ์ฒ๋ฆฌํด ์ฃผ์ธ์.
public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) {
if (e.Message.Data.ContainsKey("airbridge-uninstall-tracking")) return;
...
}
iOS Uninstall Tracking
1. Apple Push Notification service ์ค์
Unity Mobile Notifications package ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ํด๋น ํจํค์ง๋ฅผ ์ค์นํด ์ฃผ์ธ์.
2. Device Token ์ ์ก
APNs Device Token์ ๋ค์ ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ ๋ฌํด ์ฃผ์ธ์.
void Start()
{
#if UNITY_IOS
StartCoroutine(RequestAuthorization());
#endif
}
#if UNITY_IOS
IEnumerator RequestAuthorization()
{
var authorizationOption = AuthorizationOption.Alert | AuthorizationOption.Badge;
using (var req = new AuthorizationRequest(authorizationOption, true))
{
while (!req.IsFinished)
{
yield return null;
};
if (req.Granted && req.DeviceToken != "")
{
AirbridgeUnity.RegisterPushToken(req.DeviceToken);
}
}
}
#endif
ํ์ด๋ธ๋ฆฌ๋ ์ฑ ์ค์
Web SDK๋ง์ ์ค์น๋ก๋ ์ฑ ์ค์น ๋ฐ ์คํ ๋๋ ๋ฅ๋งํฌ ํธ์ถ ๋ฑ์ ์ถ๊ฐ์ ์ธ ์ด๋ฒคํธ๋ฅผ ํธ๋ํน ํ ์๊ฐ ์์ต๋๋ค. Airbridge ์์๋ ๋ค์๊ณผ ๊ฐ์ ์ค์ ์ ํตํ์ฌ ์ฝ๊ฒ ํ์ด๋ธ๋ฆฌ๋ ์ฑ์์ ์ธ์ฑ ์ด๋ฒคํธ๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค.
AirbridgeWebInterface webInterface;
webInterface = AirbridgeUnity.CreateWebInterface(
"YOUR_WEB_TOKEN", // web token
(msg) => $@"..." // post command function
);
AirbridgeUnity.CreateWebInterface
๋ฅผ ํตํด์ Web Interface ๋ฅผ ์ ์ด ํ ์ ์์ต๋๋ค.
์๋ ์ฐ๋๊ฐ์ด๋๋ฅผ ํ์ธ ํด์ฃผ์ธ์.
Unity ํ์ด๋ธ๋ฆฌ๋ ์ฑ ์ฐ๋ ๊ฐ์ด๋
Airbridge Unity SDK 1.9.3 ๋ฒ์ ๋ถํฐ ํ์ด๋ธ๋ฆฌ๋ ์ฑ ์ค์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
Troubleshooting
Android
1. Android ๊ธฐ๊ธฐ์์ ์ฌ๋ฐ๋ฅด๊ฒ Airbridge Unity๊ฐ ์ด๊ธฐํ ๋์ง ์๋ ๊ฒฝ์ฐ
- Airbridge Unity Android์ ๊ฒฝ์ฐ Content Provider๋ฅผ ํตํ์ฌ ์๋์ผ๋ก ์ด๊ธฐํ ๋ฉ๋๋ค. ์ฌ๋ฐ๋ฅธ ์ด๊ธฐํ ์์
์ ์ํ์ฌ
Project > Plugins > Android > AndroidManifest.xml
ํ์ผ์ ๋ค์๊ณผ ๊ฐ์Xml Tag
๊ฐ ๋ฐ๋์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ช ์๋์ด์ผ ํฉ๋๋ค.
<provider
android:authorities="${applicationId}.co.ab180.airbridge.unity.AirbridgeContentProvider"
android:name="co.ab180.airbridge.unity.AirbridgeContentProvider"
android:exported="false" />
2. Android ๊ธฐ๊ธฐ์์ ์ฌ์ฉ์๊ฐ ์ด๋ฏธ Custom Activity๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- Airbridge Unity๋ ์ฌ๋ฐ๋ฅธ ๋ฅ๋งํฌ์ ํธ์ถ์ ์ํด Custom Activity๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์ด๋ฏธ Custom Activity๋ฅผ ์ฌ์ฉํ๊ณ ์์ ๊ฒฝ์ฐ, ํด๋น Custom Activity์ ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์ถ๊ฐํด ์ฃผ์ธ์.
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
protected void onResume() {
super.onResume();
AirbridgeUnity.processDeeplinkData(getIntent());
}
3. Android Manifest ํ์ผ์ด ์ ๋๋ก Merge ๋์ง ์๋ ๊ฒฝ์ฐ
- Airbridge Unity์์ ์ ๊ณต๋๋ Android Manifest Merger๋ ์ด๋ฏธ ์กด์ฌํ๋
Project > Plugins > Android > AndroidManifest.xml
๋ฅผ ์ฝ์ด๋ค์ฌ Airbridge Unity์์ ์ ๊ณต๋๋Project > Plugins > Airbridge > Android> AndroidManifest.xml
๋ฅผ ๋จ์ํ๊ฒ Merge ํด์ฃผ๋ ์ปดํฌ๋ํธ๋ก์ ๋ชจ๋ ์ฌ์ฉ์์ ์ผ์ด์ค์ ๋ง์ถฐ ์ํ๋ ํํ๋ก ์ถ๋ ฅํ๋๋ฐ ์์ด์๋ ํ๊ณ๊ฐ ์์ต๋๋ค. ์ด์ ๊ฐ์ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ์ง์ ํด๋นAndroidManifest.xml
๋ฅผ Merge ํด์ผ ํฉ๋๋ค.
4. Missing 'package' key attribute on element package at ...
์๋๋ก์ด๋ 11 ๋ฒ์ ์ Package Visibility
์ ์ฑ
์ถ๊ฐ๋ก ํด๋น ๋ฒ์ ์ ์ง์ํ๋ ๋ชจ๋ ์ดํ๋ฆฌ์ผ์ด์
์์ ๋ค๋ฅธ ์ดํ๋ฆฌ์ผ์ด์
๊ณผ ์ฌ๋ฐ๋ฅด๊ฒ ์ํธ์์ฉํ๊ธฐ ์ํด ์ด๋ค ํจํค์ง์ ์ํธ์์ฉ์ด ์ด๋ฃจ์ด ์ง๋์ง์ ๋ํด์ manifest
์ <queries>
๋ฅผ ํตํด ์ ์ ์๊ฒ ์ฌ๋ฐ๋ฅด๊ฒ ๊ณ ์งํ์ฌ์ผ ํฉ๋๋ค.
Airbridge์์๋ ํด๋น ์ ์ฑ
์ ์ค์๋ฅผ ์ํด ์๋๋ก์ด๋ SDK ๋ชจ๋์ด ํด๋น ๋ณ๊ฒฝ์ฌํญ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ <queries>
ํ๊ทธ๋ฅผ ์ง์ํ๊ธฐ ์ํด์๋ Gradle
์ต์ 5.6.4
๋ฒ์ ์ด์ ๊ทธ๋ฆฌ๊ณ Android Gradle Plugin
์ต์ 3.6.0
๋ฒ์ ์ด์์ ํ์๋ก ํฉ๋๋ค.
์ ๋ํฐ ๋ฒ์ ์ ๋ฐ๋ผ ์ด๋ ํ Gradle
๋ฒ์ ์ ํฌํจํ๊ณ ์๋๊ฐ์ ๋ํด์๋ ๋ค์ ํ์ด์ง๋ฅผ ํตํด ํ์ธํ์ค ์ ์์ต๋๋ค.
๋ง์ฝ ์ฌ์ฉํ๋ ์ ๋ํฐ์ Gradle
๋ฒ์ ์ด 5.6.4
๋ฒ์ ๋ฏธ๋ง ํน์ ๋ฐ Android Gradle Plugin
๋ฒ์ ์ด 3.6.0
๋ฒ์ ๋ฏธ๋ง์ธ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ ์ ๋ํฐ ์ค์ ์ ํตํด ๋ฒ์ ์ ํน์ ํ์ฌ ์ฌ์ฉํ์ค ์ ์์ต๋๋ค.
- ์ ๋ํฐ 2020.1
๋๋ ์ดํ ๋ฒ์
2020.1
๋๋ ์ดํ ๋ฒ์ ๋ค์ ๋ฒ์ ๋ค์ Gradle
5.6.4 ์ดํ ๋ฒ์ ๊ณผ Android Gradle Plugin
3.6.0 ์ดํ ๋ฒ์ ์ ์ด๋ฏธ ํฌํจํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ ์์
์ ํ์๋ก ํ์ง ์์ต๋๋ค.
- ์ ๋ํฐ 2019.3
๋ฒ์ ~ 2019.4
๋ฒ์
2019.3
๋ฒ์ ~ 2019.4
๋ฒ์ ํด๋น ์ปค์คํ ์ต์ ์ ์ ๋ํฐ
2019.3 patch 7
์ดํ์ ๋ฒ์ ์์๋ง ๊ฐ๋ฅํฉ๋๋ค.
Gradle Build Tool
ํ์ด์ง๋ก ์ด๋ํ์ฌGradle
5.6.4 ์ด์์ ๋ฒ์ ์ ๋ค์ด๋ก๋ํด ์ฃผ์ธ์.Preferences > External Tools
๋ก ์ด๋ํ์ฌGradle Installed with Unity (recommended)
์ฒดํฌ๋ฅผ ํด์ ํ๊ณ ๋ค์ด๋ก๋ ๋ฐ์Gradle
ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํด ์ฃผ์ธ์.
Project Settings > Player > Android tab > Publishing Settings > Build
๋ก ์ด๋ํ์ฌ ๋ค์ ์ต์ ๋ค์ ๋ชจ๋ ์ ํํด ์ฃผ์ธ์.
a. Custom Main Gradle Template
b. Custom Launcher Gradle Template
- ๋ค์ ์๋ ์์ฑ๋ ๋๊ฐ์ง ํ์ผ ๋ชจ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํด ์ฃผ์ธ์.
Assets/Plugins/Android/mainTemplate.gradle
Assets/Plugins/Android/launcherTemplate.gradle
buildscript {
repositories {
google()
jcenter()
}
dependencies {
// Must be Android Gradle Plugin 3.6.0 or later. For a list of
// compatible Gradle versions refer to:
// https://developer.android.com/studio/releases/gradle-plugin
classpath 'com.android.tools.build:gradle:3.6.0'
}
}
allprojects {
repositories {
google()
jcenter()
flatDir {
dirs 'libs'
}
}
}
- ์ ๋ํฐ 2019.1
๋ฒ์ ~ 2019.2
๋ฒ์
2019.1
๋ฒ์ ~ 2019.2
๋ฒ์ Gradle Build Tool
ํ์ด์ง๋ก ์ด๋ํ์ฌGradle
5.6.4 ์ด์์ ๋ฒ์ ์ ๋ค์ด๋ก๋ํด ์ฃผ์ธ์.Preferences > External Tools
๋ก ์ด๋ํ์ฌGradle Installed with Unity (recommended)
์ฒดํฌ๋ฅผ ํด์ ํ๊ณ ๋ค์ด๋ก๋ ๋ฐ์Gradle
ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํด ์ฃผ์ธ์.
Project Settings > Player > Android tab > Publishing Settings > Build
๋ก ์ด๋ํ์ฌCustom Gradle Template
์ต์ ์ ๋ค์๊ณผ ๊ฐ์ด ์ ํํด ์ฃผ์ธ์.
- ์์ฑ๋
Assets/Plugins/Android/mainTemplate.gradle
ํ์ผ๋ก ์ด๋ํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํด ์ฃผ์ธ์.
buildscript {
dependencies {
// Must be Android Gradle Plugin 3.6.0 or later. For a list of
// compatible Gradle versions refer to:
// https://developer.android.com/studio/releases/gradle-plugin
classpath 'com.android.tools.build:gradle:3.6.0'
}
}
์ ๋ํฐ 2018.4
๋ฒ์
2018.4
๋ฒ์ ํด๋น ์ปค์คํ ์ต์ ์ ์ ๋ํฐ
2018.4 patch 24
์ดํ์ ๋ฒ์ ์์๋ง ๊ฐ๋ฅํฉ๋๋ค.
Gradle Build Tool
ํ์ด์ง๋ก ์ด๋ํ์ฌGradle
5.6.4 ์ด์์ ๋ฒ์ ์ ๋ค์ด๋ก๋ํด ์ฃผ์ธ์.Build Settings > Android
๋ก ์ด๋ํ์ฌ ๋ค์ ์ด๋ฏธ์ง์ ๊ฐ์ดBuild System
์์Gradle
์ ์ ํํด ์ฃผ์ธ์.
Preferences > External Tools
๋ก ์ด๋ํ์ฌGradle Installed with Unity (recommended)
์ฒดํฌ๋ฅผ ํด์ ํ๊ณ ๋ค์ด๋ก๋ ๋ฐ์Gradle
ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํด ์ฃผ์ธ์.
Project Settings > Player > Android tab > Publishing Settings > Build
๋ก ์ด๋ํ์ฌCustom Gradle Template
์ต์ ์ ๋ค์๊ณผ ๊ฐ์ด ์ ํํด ์ฃผ์ธ์.
- ์์ฑ๋
Assets/Plugins/Android/mainTemplate.gradle
ํ์ผ๋ก ์ด๋ํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํด ์ฃผ์ธ์.
buildscript {
dependencies {
// Must be Android Gradle Plugin 3.6.0 or later. For a list of
// compatible Gradle versions refer to:
// https://developer.android.com/studio/releases/gradle-plugin
classpath 'com.android.tools.build:gradle:3.6.0'
}
}
์ ๋ํฐ 2018.3
์ดํ ๋ฒ์
2018.3
์ดํ ๋ฒ์ Gradle
์ปค์คํฐ๋ง์ด์ฆ ์ต์
์ 2018.3
๋ฒ์ ์ดํ์ ์ ๋ํฐ์์๋ ์ง์ํ์ง ์์ต๋๋ค.
iOS
1. iOS ์์ Custom AppController ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- Airbridge Unity iOS์ ๊ฒฝ์ฐ ์ ๋ํฐ์์ ์ ๊ณตํ๋
IMPL_APP_CONTROLLER_SUBCLASS
๋ฅผ ์ด์ฉํ์ฌCustom AppController
๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ฏธIMPL_APP_CONTROLLER_SUBCLASS
๋ฅผ ์ฌ์ฉํ์ฌCustom AppController
๋ฅผ ๊ตฌํํ ๊ฒฝ์ฐ ํด๋นCustom AppController
์ ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์ถ๊ฐํด ์ฃผ์ธ์.
- (BOOL) application:(UIApplication*)application
continueUserActivity:(NSUserActivity*)userActivity
restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>>* _Nullable))restorationHandler
{
[AUAppDelegate.instance application:application
continueUserActivity:userActivity
restorationHandler:restorationHandler];
return YES;
}
- ํด๋น ์์
์๋ฃ ํ ๊ธฐ์กด์ Airbridge Unity SDK
Assets > Plugins > Airbridge > iOS > Delegate > AUAppController.mm
ํ์ผ ์ ๊ฑฐํด ์ฃผ์ธ์.
์ํ ์ฑ
Updated over 1 year ago