로딩중입니다
타겟푸시 연동 : 유니티 iOS
4/28/2015 6:01:12 PM

라이브오퍼레이션 타겟푸시 서비스

라이브옵스 타겟푸시는 앱 사용자를 필터링하여 타겟팅 된 푸시를 발송할 수 있는 서비스입니다.

타겟푸시 연동을 통해 앱 운영자는 고도화된 푸시 시스템을 이용하여 운영을 더욱 편리하게 진행할 수 있습니다.

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


주의사항
  1. 라이브오퍼레이션 애드온을 연동하기 전에 반드시 IGAW 공통 연동이 진행 되어야 합니다. [IGAW 공통 연동 : 유니티 iOS]
  2. 라이브오퍼레이션 연동을 위해서는 IgaworksUnityPlugin_iOS~*.unitypackage 파일이 유니티 프로젝트에 포함되어 있어야 합니다. [SDK 설치 : 유니티]



기본 설정

라이브옵스 서비스를 이용하기 위해서 다음의 과정이 필요합니다.


APNS 인증서 등록

애플 개발자 센터에서 생성한 APNS 인증서를 라이브옵스 관리페이지에 등록해야 합니다.

+ 개발 버전에서는 Development 버전을 등록하고, 앱스토어에 제출하는 배포 버전에서는 .p12 형태의 Production 인증서를 등록해야 합니다.


Info.plist 수정

개발 환경의 iOS SDK Target이 7.0 이상인 경우에 Info.plist에 다음과 같이 노드를 추가합니다.



라이브옵스 API

라이브옵스 서비스를 이용하기 위해서 Xcode 내의 Classes 그룹 내에 위치한 UnityAppController.mm을 직접 수정하여 연동을 진행합니다.

라이브옵스에서는 서버 푸시와 클라이언트 푸시를 지원합니다.

서버 푸시는 라이브옵스 관리페이지에서 등록한 푸시를 서버를 통해 발송하며, 클라이언트 푸시는 API를 이용하여 클라이언트 내에서 푸시를 생성합니다.



기본 연동 / 서버 푸시

라이브옵스 서버 푸시는 기본 연동만으로 이용이 가능합니다. 


유저식별값 입력

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


    주의 사항

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

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

IgaworksCorePluginIOS.SetUserId("player1001");


초기화 API 호출

  1. SetUserId
  2. LiveOpsInitPush
  3. setDeviceToken : Xcode 프로젝트의 UntiyAppController.mm 파일에 등록합니다.
// Unity Project
public class MySampleScene : MonoBehavior {
 
    void Start () {
        //유저식별값을 입력합니다.
	IgaworksCorePluginIOS.SetUserId("player1001");

        //라이브옵스를 초기화합니다.
	LiveOpsPluginIOS.LiveOpsInitPush();
    }       
}
// Xcode Project
#include <LiveOps/LiveOps.h>

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
 AppController_SendNotificationWithArg(kUnityDidRegisterForRemoteNotificationsWithDeviceToken, deviceToken);
 UnitySendDeviceToken(deviceToken);
 //디바이스 토큰 등록
 [LiveOpsPush setDeviceToken:deviceToken];
}

SetUserId, LiveOpsInitPush api는 유니티 프로젝트에서 호출합니다.

+ setDeviceToken api는 유니티 프로젝트에서 Xcode로 빌드한 뒤에 UnityAppController.mm 파일에서 호출합니다.

+ 유저식별값에는 개인정보(이메일,이름,전화번호,식별가능한 유저아이디 등)이 포함되어서는 안됩니다.

+ 유저식별값에 한글, 특수문자, 공백 등이 포함된 경우에는 반드시 인코딩 처리를 하여 사용하여야 합니다.


핸들러 등록

서버푸시와 로컬푸시를 관리하기 위한 핸들러를 등록합니다.

핸들러의 등록은 Unity에서 Xcode로 빌드를 한 뒤에 Xcode의 Classes 그룹 내의 UnityAppController.mm 파일에서 LiveOps.h를 import 하여 진행합니다.

//LiveOps header 추가
#include <IgaworksAD/LiveOps.h>

- (void)application:(UIApplication*)application didReceiveNotification:(UILocalNotification*)notification
{
 AppController_SendNotificationWithArg(kUnityDidReceiveLocalNotification, notification);
 UnitySendLocalNotification(notification);
 [LiveOpsPush handleLocalNotification:notification];
}
#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_7_0
#warning “Remote push open tracking is counted only when user touched notification center under iOS SDK 7.0”

// iOS version 7 미만일 때,
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{
 AppController_SendNotificationWithArg(kUnityDidReceiveRemoteNotification, userInfo);
 UnitySendRemoteNotification(userInfo);
 [LiveOpsPush handleRemoteNotification:userInfo fetchHandler:nil];
}
#else
// iOS version 7 이상일 때,
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo fetchCompletionHandler:(void
(^)(UIBackgroundFetchResult))completionHandler
{
 AppController_SendNotificationWithArg(kUnityDidReceiveRemoteNotification, userInfo);
 UnitySendRemoteNotification(userInfo);
 [LiveOpsPush handleRemoteNotification:userInfo fetchHandler:completionHandler];
}
#endif

+ 위 샘플 코드와 같이 핸들러는 iOS7을 기준으로 하여 OS 버전에 따라 각각 등록을 해야 합니다.



딥링크 연동 / 서버 푸시

라이브옵스의 서버푸시에서는 딥링크 기능을 제공합니다.

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

딥링크 데이터는 라이브옵스 관리페이지에서 생성 및 관리하며 웹URL(http://~)타입, 앱스키마URL(myApp://deepLinkAction) 타입이나 Json({“url”:”deepLinkAction”}) 타입으로 등록할 수 있습니다.


Info.plist 수정

딥링크 기능을 이용하기 위해서는 다음과 같이 Info.plist에 노드를 추가해야 합니다.



딥링크 데이터 확인

딥링크로 전달된 데이터의 확인은 라이브옵스 리스너를 이용하는 방법과 AppDelegate를 이용하는 방법이 있습니다.

Json 타입의 딥링크를 이용하시는 경우에는 라이브옵스 리스너 방식만 이용할 수 있습니다.

  • 라이브옵스 리스너 이용
  • AppDelegate


라이브옵스 리스너 이용

리스너를 이용하기 위해서는 반드시 handleAllNotificationFromLaunch: API보다 먼저 리스너를 등록해야 합니다.

리스너의 pushInfos 에서 딥링크 정보를 확인할 수 있으며 그 상세한 내용은 아래와 같습니다.

    1. pushInfos.sentTime : 발신된 시각
    2. pushInfos.bodyText : 푸시 내용
    3. pushInfos.deepLinkUrl : Apple Scheme Url 타입의 딥링크, 기본값 nil
    4. pushInfos.deepLink : Json 타입의 딥링크, 기본값 nil
-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
	// 딥링크를 위한 리스너 등록
	[LiveOpsPush setRemoteNotificationListener:^(NSArray* pushInfos, BOOL isForeGround) {
		for(LiveOpsPushInfo *pushInfo in pushInfos){
			/* pushInfos 객체 */
			// pushInfo.sentTime : 발신된 시각
			// pushInfo.bodyText : 푸시 내용
			// pushInfo.deepLinkUrl : 딥링크 URL, 기본값-nil 
			// pushInfo.deepLink : 딥링크 JsonObject, 기본값-nil
			
			/* isForeGround */
			// YES : app이 활성화된 상태에서 푸시를 수신
			// NO : app이 비활성화된 상태에서 푸시를 수신
		}       
	}];
	
	//LiveOps Push Notification Handler를 등록합니다.
	[LiveOpsPush handleAllNotificationFromLaunch:launchOptions];
	
   return YES;
}


AppDelegate 이용

Apple Scheme Url 타입의 딥링크를 사용하는 경우에는 AppDelegate를 이용하여 딥링크 정보를 확인할 수 있습니다.

application: openUrl: sourceApplication: annotation: 델리게이트의 url 파라미터로 전달되는 정보를 이용하여 확인합니다.

#import "AppDelegate.h"
#import <IgaworksAD/IgaworksAD.h>
#import <IgaworksAD/LiveOps.h>
 
@implementation AppDelegate
 
-(BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(idD)annotation
{
    //이 곳으로 푸시 딥링크가 전달됩니다.
    //확인한 딥링크 정보를 이용하여 원하는 액션을 실행합니다.
    NSLog(@"LiveOps Deep Link Url Info : %@", [url absoluteString]);
 
    //ex. 딥링크가 liveOps://com.igaworks.test?view=myview&param=1 로 받은 경우
    NSString* query = [url query];
    NSArray *queryPairs = [query componentsSeparatedByString:@"&"];
    NSMutableDictionary *pairs = [NSMutableDictionary dictionary];
    for(NSString* queryPair in queryPairs)
    {
        NSArray *bits = [queryPairs componentsSeparatedByString:@"="];
        NSString *key = [bits objectAtIndex:0];
        NSString *value = [bits objectAtIndex:1];
        [pairs setObject:value forKey:key];
    
        NSLog(@"LiveOps Deep Link Action~!! key: %@ , value: %@" , key, value);
    }
    return YES;
}

+ AppDelegate 방식에서는 Json 타입의 딥링크는 사용할 수 없습니다.



로컬 푸시 (클라이언트 푸시)

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


푸시 생성 및 노출

아래 API를 이용하여 푸시를 생성 및 노출합니다.
[LiveOpsPush registerLocalPushNotification:localPid  //유니크한 식별자
                                      date:dateObj   //날짜
                                      body:@"hello"  //local push에 노출될 문구
                                    button:@"go":     //local push 확인버튼 혹은 잠금해제 버튼 텍스트
                                 soundName:nil       //실행할 사운드 파일 이름, nil : iOS 기본사운드재생
                               badgeNumber:0         //미확인 시 앱 아이콘에 표시될 미확인 메시지 알림 수치
                                  customPayload:nil  //customPayload를 통해 등록한 유저 정보
];    

푸시 취소

cancelLocalPush: API를 이용하여 생성한 로컬 푸시를 취소하고 노출되지 않도록 합니다.

[LiveOpsPush cancelLocalPush:localPid]; //localPid : local push를 등록했을 때 입력한 푸시 id



라이브옵스 추가 옵션


유저 타겟팅

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

타겟팅 데이터 설정

타겟팅 된 유저에게만 타겟푸시를 전송하기 위해서 커스텀 유저 데이터를 세팅할 수 있습니다.
세팅된 커스텀 유저 데이터는 타겟푸시 관리페이지에서 확인할 수 있습니다. 아래 예시는 유저 나이를 커스텀 데이터로 수집하는 것입니다.
//LiveOpsSetTargetingNumberData(int customUserData, string customUserDataKey);
//LiveOpsSetTargetingStringData(string customUserData, string customUserDataKey);

LiveOpsPluginIOS.LiveOpsSetTargetingNumberData(86, "age");
customUserData : 타겟팅을 위한 유저 데이터를 입력합니다. 
customUserDataKey : 유저 커스텀 데이터 키를 설정합니다.

푸시 수신 on/off

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

푸시 수신 설정

LiveOpsSetRemotePushEnable API를 호출하여 사용하며, 파라미터와 사용 예시는 다음과 같습니다.
  • true : 푸시를 수신함.
  • false : 푸시를 수신하지 않음.
LiveOpsPluginIOS.LiveOpsSetRemotePushEnable(false);