로딩중입니다
라이브오퍼레이션 연동 : 안드로이드 유니티
10/20/2017 4:55:48 PM

라이브 오퍼레이션 서비스

라이브오퍼레이션 서비스는 앱 사용자를 필터링하여 타겟팅 된 푸시를 발송할 수 있는 타겟푸시 서비스 기능과

사용자에게 알려야할 내용이 있을 때 팝업 형태의 공지창을 이용하여 안내 내용을 노출하는 공지팝업 기능을 제공하는 서비스입니다.

푸시 연동을 통해 앱 운영자는 고도화된 푸시 시스템을 이용하여 운영을 할 수 있으며 , 공지팝업 기능을 통해 진행 중인 이벤트나 신규 기능 출시 등의 안내를 진행할 수 있습니다.

라이브오퍼레이션 서비스 소개나 이용방법 안내는 아래의 아티클을 통해 확인할 수 있습니다.

[라이브오퍼레이션 서비스 소개]


서비스 이용 중 도움이 필요한 경우에는 아래 메일 주소로 연락 부탁 드립니다.

1. 기술 문의 - 기술지원팀 (tech_support@igaworks.com)


주의사항
  1. 2019년 4월 11일 부로 더이상 Google Cloud Messaging (GCM) 을 사용할 수 없으며 이는 모두 Firebase Cloud Messaging (FCM) 으로 교체됩니다.
  2. LiveOps 푸시는 기본적으로 FCM 이 연동되어 있어야 합니다. 연동을 진행하기 전 우선  FCM을 먼저 연동해 주시길 부탁드립니다. [Firebase Cloud Messging 연동 가이드]
  3. 기존 사용하시던 GCM LiveOps 푸시 서비스에서 에서 FCM LiveOps 푸시 서비스로 마이그레이션을 진행할 경우, 전달 드리는 가이드를 참고하여서 진행 부탁 드립니다. [라이브오퍼레이션 유니티 FCM 가이드]



SDK 다운로드 및 설치

[SDK 다운로드 센터] 에서 최신 유니티 패키지를 다운로드 합니다.

다운로드 유니티 패키지 파일을 유니티 프로젝트에 import 합니다.



FCM과 LiveOps 연동 완료 후 빌드시 충돌이 일어날 경우 아래 라이브러리를 제거합니다.

  • android-support-core-utils-26.0.2
  • support-annotations-26.0.2
  • support-compat-26.0.2




안드로이드매니페스트 설정

라이브오퍼레이션을 이용하기 위한 내용을 AndroidManifest.xml 파일에 추가합니다.


앱키 & 해시키 추가

Igaworks 홈페이지에서 애드브릭스 앱 등록 후 발급받은 앱키, 해시키를 <application></application> 태그 안에 추가합니다.

<application>
        ...
            <meta-data android:name="igaworks_app_key" android:value="이곳에_앱키를_입력하세요" />
            <meta-data android:name="igaworks_hash_key" android:value="이곳에_해시키를_입력하세요" />
        ...
        </application>


퍼미션 추가

<manifest></manifest> 태그 안에 필수 퍼미션을 추가합니다.

<manifest>
        ...
            <uses-permission android:name="android.permission.INTERNET"/>
            <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
            <uses-permission android:name="android.permission.WAKE_LOCK"/>
            <uses-permission android:name="android.permission.VIBRATE"/>
            <!-- LiveOps v1.3.6 부터는 필요하지 않습니다. --> 
            <uses-permission android:name="android.permission.GET_TASKS"/>
            <!-- C2DM Permission --> 
            <permission android:name="MY_PACKAGE_NAME.permission.C2D_MESSAGE" android:protectionLevel = "signature"/>
            <uses-permission android:name="MY_PACKAGE_NAME.permission.C2D_MESSAGE"/> 
            <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
        ...
        </manifest>

+ C2DM 퍼미션 설정의 MY_PACKAGE_NAME 에는 연동 중인 프로젝트의 패키지 네임을 입력합니다.


리시버 추가

    <application></application> 태그 안에 라이브오퍼레이션을 위한 필수 리시버와 서비스를 등록합니다.

<!-- IGAWorks GCM Broadcast Receiver -->
        <receiver android:name="com.igaworks.liveops.pushservice.LiveOpsGCMBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
                <category android:name="MY_PACKAGE_NAME" />
            </intent-filter>
        </receiver>
        
        <!-- IGAWorks Push Service -->
        <service android:enabled="true" android:name="com.igaworks.liveops.pushservice.GCMIntentService" />
        
        <!-- Client Push App Receiver -->
        <receiver android:name="com.igaworks.liveops.pushservice.LiveOpsReceiver"
            android:permission="MY_PACKAGE_NAME.permission.C2D_MESSAGE">
            <intent-filter>
                <action android:name="com.igaworks.liveops.pushservice.CLIENT_PUSH_RECEIVE"/>
            </intent-filter>
        </receiver>


구글 플레이 서비스 meta tag 추가

<application></application> 태그 안에 Google Play Services 를 연동하기 위해 meta tag를 추가 합니다.

<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>


OREO 지원 API 추가

<manifest></manifest> 태그 안에 안드로이드 8.0 OREO 버전을 지원 하는 API를 추가합니다.

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="26"/>




기본 연동

세션 트래킹 : 자동

애드브릭스에서 제공하는 기본 분석을 위한 연동입니다.
연동하는 앱이 안드로이드 4.0.4 이상만을 지원한다면 autoSessionTracking 을 사용하여 세션 트래킹을 합니다.

AndroidManifest.xml에 아래의 내용을 추가하여 autoSessionTracking 기능을 활성화합니다.
<application
    android:name="com.igaworks.IgawDefaultApplication"
    ... 중략 ...
>
</application>

자체 application 클래스를 사용하고 있는 경우
아래 예시와 같이 이미 application 클래스를 사용하고 있는 경우에는 application class의 onCreate()에 autoSessionTracking api를 추가합니다.
<!-- AndroidManifest.xml -->
<application
    android:name="PACKAGE_NAME.YourCustomApplication"
    ... 중략 ...
>
</application>
// using 지시문을 선언합니다.
            using IgaworksUnityAOS;
            
            public class MySampleScene : MonoBehavior { 
                void Awake() {
                    //유니티 엔진이 초기화될 때, IGAW 플러그인을 초기화 합니다.
                    IgaworksUnityPluginAOS.InitPlugin ();
                }
            }
 Caution!!!  Application 클래스에서는 autoSessionTracking API 외 어떠한 애드브릭스 분석용 API도 호출해서는 안됩니다.


세션 트래킹 : 수동

애드브릭스에서 제공하는 기본 분석을 위한 연동입니다.
연동하는 앱이 안드로이드 4.0.4 이하까지 지원을 하거나 수동으로 세션 트래킹을 하고자 할때에 다음을 참고하여 연동을 합니다.
플러그인 초기화

어플리케이션 실행 후 유니티가 초기화될 때 init 과 startApplication api를 호출하여 플러그인도 초기화합니다.

// using 지시문을 선언합니다.
            using IgaworksUnityAOS;
            
            public class MySampleScene : MonoBehavior { 
                void Awake() {
                    //유니티 엔진이 초기화될 때, IGAW 플러그인을 초기화 합니다.
                    IgaworksUnityPluginAOS.InitPlugin ();
                }
            }

어플리케이션이 foreground 나 background 로 전환될 때에 호출하여야 합니다.

startSession, endSession 호출
public class MySampleScene : MonoBehavior {
                    
    //앱 시작
    void Start()
    {
        //유니티 버전 5.3 미만에서는 앱이 최초로 실행될 때, OnApplicationPause를 리턴하지 않기 때문에 직접 startSession을 호출.      
        #if UNITY_5_3_OR_NEWER
            Debug.Log("Current Unity version is UNITY_5_3_OR_NEWER");
        #else            
            IgaworksUnityPluginAOS.Common.startSession();
        #endif
    }

    //앱 상태 체크
    void OnApplicationPause(bool pauseStatus){
        
        if (pauseStatus) {
        Debug.Log ("go to Background");
        IgaworksUnityPluginAOS.Common.endSession();
    } else {
        Debug.Log ("go to Foreground");
        IgaworksUnityPluginAOS.Common.startSession();
    }
} 




푸시 연동 : 서버 푸시

FCM 설정 

현재 연동되어 있는 FCM 설정을 변경합니다.

  • FCM API 정의

FCM 에 정의된 onTokenReceived() 안에 아래 API 를 정의 합니다.

public void Start() {
    Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
    Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}

public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) {
    UnityEngine.Debug.Log("Received Registration Token: " + token.Token);
    //LiveOps에 FCM 토큰 값을 연동합니다.
    IgaworksUnityPluginAOS.LiveOps.registerFCMToken(token.Token);
}

public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) {
    UnityEngine.Debug.Log("Received a new message from: " + e.Message.From);
}


  • Send ID 추가

google-services.json 안에 project_number에 라이브오퍼레이션 Sender ID를 추가 합니다.

※ 주의 사항 : Sender ID 910677924034 LiveOps 의 Sender ID 로 고정 값입니다.

{
    "project_info" : {
        "project_number" : "Your_FCM_project_number,910677924034",
        "project_id" : "sdkdemo-96c95" , 
        "storage_bucket" : "sdkdemo-96c95.appspot.com" ,
    }
}

SDK 초기화

라이브오퍼레이션을 이용하기 위해 앱의 메인 액티비티에서 아래 API를 이용하여 기본 연동를 진행합니다.
이 연동이 완료되면 서버 푸시의 이용이 가능하며, 푸시 오픈에 대한 트래킹이 가능합니다.

    • Igaw~.Common.setUserId(string userId);
    • Igaw~.LiveOps.resume();
public class MySampleScene : MonoBehavior {

    void Start () {
        //유저식별값 설정
        IgaworksUnityPluginAOS.Common.setUserId("bXlBY2NvdW50X25hbWU=");

    }

    void OnApplicationPause(bool pauseStatus){
        
        if (pauseStatus) {
            IgaworksUnityPluginAOS.Common.endSession();
        } else {
            IgaworksUnityPluginAOS.Common.startSession();
            // 라이브옵스 활성화
            IgaworksUnityPluginAOS.LiveOps.resume();
        }
    }
}  
           

setUserId API를 이용하여 반드시 유저식별값을 등록해야 푸시 발송 대상에 포함됩니다.
+ 한글,공백,특수문자 등을 유저 식별값으로 사용하실 경우에 반드시 인코딩을 하여 사용하셔야 합니다.
+ 푸시 오픈을 트래킹하기 위해 어플리케이션이 foreground 로 전환될 떄, resume api를 호출하여야 합니다.



유저식별값 입력

유저식별값은 라이브오퍼레이션에서 유저를 판단하기 위해 사용되는 정보입니다.


주의 사항

    1. 1명의 유저는 1개의 고유한 유저식별값을 가져야하며, 가변적인 값을 사용해서는 안됩니다.
    2. 개인정보(이메일, 이름, 전화번호, 식별가능한 유저아이디 등)이 포함되어서는 안됩니다.
    3. 한글, 특수문자, 공백 등이 포함된 경우에는 반드시 URL 인코딩 처리를 하여 사용하여야 합니다.


위 주의사항에 유의하여 유저 식별값을 입력합니다.

IgaworksUnityPluginAOS.Common.setUserId("bXlBY2NvdW50X25hbWU=");



딥링크 연동 / 서버 푸시

라이브옵스의 서버 푸시에서는 딥링크 기능을 제공합니다.
딥링크 기능은 유저가 푸시를 수신하고 오픈했을 때, 딥링크 데이터에 정의된 액션을 수행하는 것을 가능하게 합니다.

딥링크 데이터는 라이브옵스 관리페이지에서 생성 및 관리하며 3가지 타입으로 등록할 수 있습니다.

종류 형식
URL (Http 타입) http://www.igaworks.com
URL (Custom Scheme 타입) myApp://activity.com
Json 타입 {"key":"value", "igaworks":"sample"}


  • URL (http 타입) 및 Json 

onNewIntent 함수를 오버라이드하여 딥링크 타입에 따라 구현하여 사용합니다.
public class MainActivity extends Activity{ 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
 
		IgawCommon.setUserId(MainActivity.this"userid_123123123");
		IgawLiveOps.initialize(MainActivity.this);
 
		//onNewIntent 리스너로 intent를 전달합니다.
		onNewIntent(getIntent());
	}
 
	@Override
	protected void onNewIntent(Intent intent) {
		super.onNewIntent(intent);
		/* 딥링크 타입에 따라 아래를 참고하여 구현합니다. */
 
		/* 1. 앱 스키마 타입(myApp://deepLinkAction) 딥링크 구현
		 * 
		 * 딥링크로 전달된 앱스키마 액션을 실행합니다.
		 * IgawLiveOps.onNewIntent(MainActivity.this, intent);
		 */
 
		/* 2. Json 문자열 타입({“url”:”deepLinkAction”}) 딥링크 구현
		 * 
		 * 딥링크로 전달된 Json 문자열을 추출하고 Json 오브젝트로 변환합니다.
		 * String jsonStr = intent.getStringExtra("com.igaworks.liveops.deepLink");
		 * JSONObject jsonObj;
		 * try {
		 *     jsonObj = new JSONObject(jsonStr);
		 *     //Json 오브젝트를 파싱하여 액션을 실행하도록 구현합니다.
		 * } catch (Exception e) {
		 *     // TODO: handle exception
		 * }
		 */
	}
}

  • URL (Custom Scheme 타입)

매니페스트 파일에 IgawLiveOpsPushMessageLauncherActivity 추가합니다. 그리고 푸시 메시지를 클릭했을 때, 오픈될 Activity의 <intent-filter></intent-filter> 태그 안에 scheme과 host를 입력합니다. 만약 Custom Scheme이 myApp://activity.com이라면, scheme에 myApp을 host에 activity.com을 입력합니다.
<!-- IgawLiveOpsPushMessageLauncherActivity 를 추가합니다. -->
<activity 
	android:name="com.igaworks.liveops.pushservice.IgawLiveOpsPushMessageLauncherActivity" 
	android:permission="MY_PACKAGE_NAME.permission.C2D_MESSAGE"
	android:noHistory="true"/> 


<!-- 딥링크를 적용할 Activity에 설정합니다. -->
<activity android:name="com.example.DeeplinkActivity">
	<intent-filter>
	<data android:scheme="myApp" android:host="activity.com" />
		  <action android:name="android.intent.action.VIEW" />
      		  <category android:name="android.intent.category.DEFAULT" />
      		  <category android:name="android.intent.category.BROWSABLE" />
	</intent-filter>            
</activity>
+ MY_PACKAGE_NAME 에는 연동 중인 프로젝트의 패키지 네임을 입력합니다.




푸시 연동 : 클라이언트 푸시

라이브옵스는 클라이언트에서 API를 이용하여 직접 생성하여 사용할 수 있는 클라이언트 푸시 기능을 제공합니다.
일반적으로 클라이언트 푸시는 앱 내에서 미리 지정한 조건에 유저가 일치하였을 때, 푸시를 생성하여 노출합니다.
또한 개발사 서버와 앱 간의 통신이 가능하다면, 서버 이벤트를 캐치하여 푸시를 생성하는 방식으로도 사용할 수 있습니다.

클라이언트 푸시에서는 일반 푸시 빅 텍스트 푸시를 지원합니다.

일반 클라이언트 푸시

일반 클라이언트 푸시는 기본 텍스트로 구성된 푸시입니다.
setNormalClientPushEvent API를 이용하여 푸시 생성 및 노출을 할 수 있습니다.
IgaworksUnityPluginAOS.LiveOps.setNormalClientPushEvent(
    1,                 	// Delay seconds. 몇 초 뒤에 보낼지 설정
    "Let’s play now!",      // 전송할 메시지
    1,			// Event ID, 취소할 때 쓰기 위한 값.
    false			// 앱이 실행 중일 때에도 보이게 할 것인지 설정
);


빅 텍스트 클라이언트 푸시

빅 텍스트 클라이언트 푸시는 최대 160자(한글,영문 공통)까지의 텍스트를 지원하는 푸시입니다.
또한 안드로이드 앱에서 표현 가능한 html 형식도 지원 합니다.(굵게, 밑줄, 폰트색상)
setBigTextClientPushEvent API를 이용하여 푸시 생성 및 노출을 할 수 있습니다.
IgaworksUnityPluginAOS.LiveOps.setBigTextClientPushEvent(
    1, 				// Delay seconds, 몇 초 뒤에 보낼지 설정
    "contentText", 			// contents
    "bigContentTitle", 		// 일반 푸시 내용
    "Let's play now! WoooooooW!!",	// 푸시에 표시될 빅 텍스트
    "summaryText", 			// 푸시에 표시될 요약 텍스트
    1, 				// Event ID, 취소할 때 쓰기 위한 것
    false				// 앱이 실행 중일 때에도 보이게 할 것인지 설정
);
+ 푸시 노출 방식
푸시의 타입과 안드로이드 OS 버전, 푸시 메시지 바의 상태에 따라서 푸시가 노출되는 방식이 달라질 수 있습니다.
자세한 내용은 아래 링크를 확인할 수 있습니다.




푸시 추가 옵션


유저 타겟팅

유저그룹을 설정하여 타겟푸시의 수신 대상을 직접 선택하실 수 있습니다.
유저 그룹을 설정하기 위한 데이터는 직접 세팅하여 확보할 수 있습니다.
아래의 항목을 참고하여 설정을 진행합니다.


타겟팅 데이터 설정
타겟팅 된 유저에게만 타겟푸시를 전송하기 위해서 커스텀 유저 데이터를 세팅할 수 있습니다.
세팅된 커스텀 유저 데이터는 타겟푸시 관리페이지에서 확인할 수 있습니다. 아래 예시는 구매 횟수를 커스텀 데이터로 수집하는 것입니다.
//IgaworksUnityPluginAOS.LiveOps.setTargetingData(String user_group, Object user_data);
//user_group : 관리페이지에서 확인할 수 있는 유저그룹의 이름
//user_data : 유저 그룹에 등록할 유저 데이터, user_data 에는 int, long, double, bool, object를 지원합니다.
//예) 구매유저들을 그룹핑하기 위한 그룹 "purchaseCount" 에 구매횟수 데이터를 등록한다.
IgaworksUnityPluginAOS.LiveOps.setTargetingData("purchaseCount", 10);
+ customUserData : 타겟팅을 위한 유저 데이터를 입력합니다. bool, int, long, float, String을 지원합니다.
+ customUserDataKey : 유저 커스텀 데이터 키를 설정합니다.



타겟팅 데이터 동기화
resume api 를 호출하여 설정된 타겟팅 데이터를 라이브옵스 서버와 동기화합니다.
OnApplicationPause()에 아래와 같이 추가합니다.
void OnApplicationPause(bool pauseStatus){
    if (pauseStatus){
        Debug.Log("go to Background");
        IgaworksUnityPluginAOS.Common.endSession();
    }
    else{
        Debug.Log("go to Foreground");
        IgaworksUnityPluginAOS.Common.startSession();
        IgaworksUnityPluginAOS.LiveOps.resume();
    }
}



수동 동기화
데이터 동기화를 수동으로 업데이트 하려면, flush api 를 호출하여 설정된 타겟팅 데이터를 라이브옵스 서버와 동기화합니다.
IgaworksUnityPluginAOS.LiveOps.flushTargetingData ();



푸시 수신 on/off

전송되는 서버 푸시에 대해서 수신 여부를 설정할 수 있습니다. 일반적으로 유저가 푸시 수신 여부를 설정할 때, API를 호출합니다.
또한 수신 여부 이벤트에 대한 델리게이트를 제공합니다. 이벤트 델리게이트를 이용하여 수신 여부 처리 결과를 처리할 수 있습니다.

푸시 수신 설정
enableService API를 호출하여 사용하며, 파라미터와 사용 예시는 다음과 같습니다.
  • true : 푸시를 수신함.
  • false : 푸시를 수신하지 않음.
//true:수신모드, false:수신거부모드
            IgaworksUnityPluginAOS.LiveOps.enableService (false);



푸시 아이콘 이미지 교체


유니티 5.0 이하

타겟푸시에서 사용하는 푸시 아이콘 이미지는 Launcher Icon으로 등록된 앱 아이콘 이미지를 사용합니다.

구글 피쳐드를 받기 위해 이미지 교체가 필요하신 경우에는 setNotificationIconStyle api를 호출하여 이미지를 교체할 수 있습니다.

//IgaworksUnityPluginAOS.LiveOps.setNotificationIconStyle(string smallIcon, string largeIcon, string iconbackground_argb);
IgaworksUnityPluginAOS.LiveOps.setNotificationIconStyle ("ic_small_filename", "ic_large_filename", "ff9d261c");

+ IgaworksUnityPluginAOS.LiveOps.initialize api 다음에 호출합니다.

+ 이미지 파일 이름은 이미지 파일 확장자를 뺀, 이름만을 입력합니다.

+ 모든 해상도의 Drawable 폴더에 알맞은 이미지를 모두 추가해야 합니다.



유니티 5.0 이상
유니티 5.0 이상에서는 직접 Image resource 를 추가할 수 없으므로 이를 위한 .aar 파일을 만들어 Image resource 를 추가해야 합니다.  
aar 파일은 안드로이드 스튜디오를 틍해 생성하실 수 있으나 진행이 어려울 경우 아래 sample 파일을 수정하여 연동을 진행해 주시길 부탁드립니다.

※ Sample.aar 파일 사용법

1. 다운로드 받은 aar 파일을 압축 프로그램 (7-zip) 으로 압축을 풀어줍니다.
2. 압축을 푼 이후 나오는 폴더 중 res 폴더 안에 있는 drawable 폴더에 사용할 아이콘 이미지를 추가합니다.
(이미지는 drawable 해상도에 따라 모두 추가합니다.)
3. 아이콘 이미지 추가 후 명령프롬프트 혹은 터미널에서 아래의 명령어를 입력하여 다시 aar 파일로 압축합니다.
jar cvf fileName.aar - C sampleaarFolder/ .
4. 생성된 aar 파일을 Assets -> Plugins -> Android 에 추가합니다.
5. setNotificationIconStyle api 를 호출합니다.
IgaworksUnityPluginAOS.LiveOps.setNotificationIconStyle ("ic_small_filename", "ic_large_filename", "ff9d261c");



알림 설정

안드로이드 5.0이상에서 헤드업 알림과 잠금 화면 알림을 설정할 수 있습니다.

헤드업 알람은 기기가 활성 상태일 때 알림을 노출하는 기능입니다. 잠금 화면 알람은 알림이 잠금화면에 노출하는 기능입니다.

(더 자세한 내용은 구글 문서를 확인합니다. [구글 문서 확인하기])

setNotificationOption api를 호출하여 헤드업/잠금 화면 알람을 설정합니다.


헤드업 알림 설정 (priority)

    • PRIORITY_MAX (int:2), 헤드업 알림 사용
    • PRIORITY_HIGH (int:1), 헤드업 알림 사용
    • PRIORITY_DEFAULT (int:0), 헤드업 알림 사용하지 않음
    • PRIORITY_LOW (int:-1), 헤드업 알림 사용하지 않음
    • PRIORITY_MIN (int:-2), 헤드업 알림 사용하지 않음

잠금 화면 알림 설정 (visibility)

    • VISIBILITY_SECRET (int:-1), 락스크린 알림 사용하지 않음
    • VISIBILITY_PRIVATE (int:0), 내용을 표시하지 않고 락스크린 알림
    •  VISIBILITY_PUBLIC (int:1), 전체 내용을 락스크린에 알림
// void setNotificationOption(int priority, int visibility)
IgaworksUnityPluginAOS.LiveOps.setNotificationOption(IgaworksUnityPluginAOS.AndroidNotificationPriority.PRIORITY_HIGH, IgaworksUnityPluginAOS.AndroidNotificationVisibility.VISIBILITY_PUBLIC);
잠금 화면 알림은 유저의 디바이스 설정이 "민감한 내용 숨기기"로 설정되어 있을 경우 동작합니다.
+ 잠금 화면 알람은 락스크린을 사용할 경우, 정상적으로 작동하지 않을 수 있습니다.



알림 요약 (InboxStyle)


여러가지의 알림을 하나의 요약 알림으로 결합합니다. Inbox Style은 서버푸시에서만 작동합니다.
(*클라이언트 푸시의 경우 푸시ID를 알 수 없기 때문에 Inbox Style을 지원하지 않습니다.)

setStackingNotificationOption api를 호출하여 설정합니다.

알림 요약 설정 (useStacking)

    • true : 알림 요약기능을 사용하여 노출합니다.
    • false : 알림 요약기능을 사용하지 않습니다.

요약 알림 노출 설정 (useTitleForStacking)

    • true : 요약된 알람을 펼칠 때, 제목을 노출합니다.
    • false : 요약된 알림을 펼칠 때, 내용을 노출합니다.

요약된 알람의 제목, 내용 설정 (ContentTitle, ContentText)

    • empty :  가장 최근의 알람의 제목과 내용을 노출합니다.
    • your_custom_message : api에 호출한 제목과 내용을 노출합니다.

요약 알림 펼칠 때, 노출 제목 설정 (bigContentTitle)

    • empty ContentTitle을 노출합니다.
    • your_custom_message : api에 호출한 제목을 노출합니다.

요약 알림 펼칠 때, 요약 내용 설정 (bigContentSummaryText)

    • empty : 컨텐츠 요약부분을 사용하지 않습니다.
    • your_custom_message : api에 호출한 내용을 노출합니다.
//void setStackingNotificationOption(bool useStacking, bool useTitleForStacking, string ContentTitle, string ContentText, string bigContentTitle, string bigContentSummaryText)
IgaworksUnityPluginAOS.LiveOps.setStackingNotificationOption(true, false, "More events are waiting for you", "See detail", "All events", "For Summary Text");




공지팝업 연동

공지팝업 서비스를 이용하기 위해서 다음의 단계에 따라서 초기화를 진행합니다.

아래의 초기화 API들은 어플리케이션이 시작되는 시점에서 호출하시는 것을 권장합니다.



유저식별값 입력

유저식별값은 라이브오퍼레이션에서 유저를 판단하기 위해 사용되는 정보입니다.


주의 사항

    1. 1명의 유저는 1개의 고유한 유저식별값을 가져야하며, 가변적인 값을 사용해서는 안됩니다.
    2. 개인정보(이메일, 이름, 전화번호, 식별가능한 유저아이디 등)이 포함되어서는 안됩니다.
    3. 한글, 특수문자, 공백 등이 포함된 경우에는 반드시 URL 인코딩 처리를 하여 사용하여야 합니다.
    4. IgawLiveOps.initialize API가 호출되기 전에 설정되어야 합니다.

위 주의사항에 유의하여 유저 식별값을 입력합니다.

IgaworksUnityPluginAOS.Common.setUserId("bXlBY2NvdW50X25hbWU=");



공지팝업 데이터로드

requestPopupResources api를 호출하여 라이브오퍼레이션 관리페이지에서 설정한 공지팝업 데이터를 로드합니다.

데이터 로드를 진행하기 전에 반드시 유저식별값이 설정되어 있어야 합니다.


주의사항

  1. 유저식별값이 입력되지 않으면 공지팝업 데이터로드가 불가능합니다.
  2. 라이브오퍼레이션 공지팝업 관리페이지에서 새로운 공지를 추가했어도, 데이터로드가 진행되지 않으면 SDK에서는 새로운 공지를 확인할 수 없습니다.

위 주의사항에 유의하여 공지팝업 데이터를 로드합니다.

IgaworksUntiyPluginAOS.LiveOps.requestPopupResource();



공지팝업 노출 API

showPopup api를 호출하여 공지팝업을 노출하고자 하는 시점에서 팝업 형태의 공지를 노출합니다.

공지에 표현되는 내용은 공지팝업 관리페이지에서 설정한 겂이어야 합니다.

아래의 예시는 showPopupNotiBtn 버튼을 클릭했을 때, 공지팝업을 노출하는 것을 가정으로 하여 작성하였습니다.

void OnGUI() {
    //공지팝업을 노출합니다.
    if(GUI.Button (new Rect(100,100,200,200), "showPopupNoti")) {
        IgaworksUnityPluginAOS.LiveOps.showPopUp("공지팝업스페이스키");
    }
}

+ 공지팝업스페이스키는 공지팝업 관리페이지에서만 발급 받을 수 있습니다.



공지팝업 딥링크

공지팝업의 딥링크 기능을 이용하여 공지팝업을 통해 다양한 액션을 수행하도록 처리할 수 있습니다.

void Start() {
    //딥링크 델리게이트 설정
    IgaworksUnityPluginAOS.OnReceiveDeeplinkData = mOnReceiveDeeplinkData;
}

//딥링크 델리게이트 구현
void mOnReceiveDeeplinkData(string deeplink) {
    //전달받은 딥링크 데이터를 이용하여 추가 액션을 구현합니다.
    Debug.Log("deep link data :::: " + deeplink);
}

+ 딥링크는 공지팝업 관리페이지에서 등록할 수 있습니다.

+ 딥링크의 형태는 Json형태를 지원합니다.



공지팝업 유저타겟팅

유저그룹을 설정하여 공지팝업의 노출 대상을 직접 선택하실 수 있습니다.

유저 그룹을 설정하기 위한 데이터는 직접 세팅하여 확보할 수 있습니다.


타겟팅 데이터 설정

타겟팅 된 유저에게만 공지팝업을 노출하기 위해서 커스텀 유저 데이터를 세팅할 수 있습니다.

세팅된 커스텀 유저 데이터는 공지팝업 관리페이지에서 확인할 수 있습니다. 아래 예시는 구매 횟수를 커스텀 데이터로 수집하는 것입니다.

//IgaworksUnityPluginAOS.LiveOps.setTargetingData(string  customUserDataKey, string customUserData);
IgaworksUnityPluginAOS.LiveOps.setTargetingData("purchaseCount", purchaseCount);

customUserData : 타겟팅을 위한 유저 데이터를 입력합니다. bool, int, long, float, String을 지원합니다.

customUserDataKey : 유저 커스텀 데이터 키를 설정합니다.



타겟팅 데이터 동기화

resume api 를 호출하여 설정된 타겟팅 데이터를 라이브옵스 서버와 동기화합니다.

액티비티의 onResume()에 아래와 같이 추가합니다.

//앱 상태 체크
void OnApplicationPause(bool pauseStatus){
    if (pauseStatus) {
        Debug.Log ("go to Background");
    } else {
        Debug.Log ("go to Foreground");
    //타겟팅 데이터 동기화
    IgaworksUnityPluginAOS.LiveOps.resume();
    }
} 




공지팝업 추가옵션


공지팝업 이벤트 리스너

공지팝업에서 발생하는 클릭 이벤트에 대한 리스너를 제공합니다.

    • OnLiveOpsCancelPopupBtnClick : 공지팝업 닫기 이벤트
    • OnLiveOpsPopupClick : 공지팝업 클릭 이벤트

setLiveOpsPopupEventListener api를 이용하여 델리게이트를 등록하고 구현합니다.

void Start () {
    IgaworksUnityPluginAOS.LiveOps.setLiveOpsPopupEventListener ();

    IgaworksUnityPluginAOS.OnLiveOpsCancelPopupBtnClick = mOnLiveOpsPopupCancel;
    IgaworksUnityPluginAOS.OnLiveOpsPopupClick = mOnLiveOpsPopupClick;
}

void mOnLiveOpsPopupCancel(){
    Debug.Log("PopupCancel :::: call");
}

void mOnLiveOpsPopupClick(){
    Debug.Log("PopupClick :::: call");
}



공지팝업 강제 종료

유저의 클릭 이벤트 없이 api를 이용하여 동적으로 공지팝업을 종료 처리할 수 있습니다.


현재 공지 팝업 종료

destroyPopup api 를 호출하여 현재 노출되어 있는 최상위 공지 팝업만을 종료 처리합니다.

IgaworksUnityPluginAOS.LiveOps.destroyPopup ();


모든 공지 팝업 종료

destroyAllPopups api를 호출하여 현재 노출되어 있는 최상위 공지 팝업 외의 다른 대기 중인 팝업도 모두 종료 처리 합니다.

IgaworksUnityPluginAOS.LiveOps.destroyAllPopups ();