개요
푸시 기능을 통해 게임을 실행하지 않은 상황에서 플레이어의 휴대전화기로 각종 휴일 이벤트, 기념 이벤트와 같은 게임 관련 정보를 푸시 할 수 있습니다. 푸시 효과는 다음 그림과 같습니다.
액세스 내비게이션
1단계 사전 요구 사항
1) 이미 info.plist 내에서 푸시 스위치를 설정한 경우, 아래 그림과 같습니다.
2) Xcode8 컴파일링을 사용하는 작업은 프로젝트의 TARGETS->Capabilities->Push Notificatons
푸시 스위치를 주의하여 열어야 합니다. 그 예시는 아래 그림과 같습니다.
3) MSDK iOS 푸시는 애플 APNS를 통해 구현하며, 각 작업 PM 또는 Tencent 측 인터페이스 인원이 Tencent 내부 네트워크 RDM, 페이잉(飞鹰_ 시스템 상에서 관련 인증서를 설정합니다#.
2단계 iOS 인증서 설정
인증서 설정은 iOS 클라이언트에 한정되며, Android 클라이언트는 이 항목을 무시해도 됩니다.
1 인증서 신청
제품은 RDM(Tencent 내 네트워크로, 작업 PM 또는 Tencent 측 인터페이스 인원의 조작 필요)에서 푸시를 요청해 인증서를 발송해야 합니다. 구체적인 내용은 RTX RDM 비서를 참조하십시오.
2 SSL 인증서 생성
1) RDM(Tencent 내 네트워크로, 작업 PM 또는 Tencent 측 인터페이스 인원의 조작 필요)에서 P12 인증서를 다운로드합니다. 구체적인 경로는 게임 제품 -> 배포 관리 -> 인증서 관리이며, MSDK를 예로 들면, 아래 그림과 같습니다.
2) 열린 인터페이스 안에서 배포 인증서 아래의 xxx_push.p12 파일을 다운로드하십시오.
3) 클라이언트를 열어 xxx_push.p12 파일이 있는 디렉토리에 진입해 다음 명령을 실행합니다.
//해당 명령으로 생성된 pem 인증서에는 비밀번호가 없으며, 페이잉 시스템에 업로드할 때 비밀번호를 입력할 필요가 없습니다. 주의하여 12페이지의 인증서 비밀번호와 구분하십시오.
openssl pkcs12 -in xxx_push.p12 -out xxx_push.pem -nodes
3 SSL 인증서 업로드
1) 페이잉 시스템에 진입(Tencent 내 네트워크로, 작업 PM 또는 Tencent 측 인터페이스 인원의 조작 필요)해 좌측 탐색창의 MSDK 관리 -> 메시지 관리 -> 인증서 설정(권한이 없는 경우 RTX에서 marsrabelma 마텅(马腾)에게 연락해 개통 권한 요청)을 클릭하고, 자신의 게임을 검색합니다. 여기서 MSDK를 예로 들면, 다음 그림과 같습니다.
2) 게임을 선택하고 인증서 설정 페이지로 진입합니다. 예시는 다음 그림과 같습니다.
3) [2 단계 SSL 인증서 생성)#MakeSSLCertificate)에서 생성한 pem 인증서를 생산환경으로 업로드하며, 비밀번호는 입력할 필요가 없습니다. 업로드 성공 후에 좌측 상단 코너의 게임 IOS 메시지 업데이트
버튼을 눌러 저장합니다. 개발 환경 인증서는 주의를 기울일 필요가 없으며, 인증서는 이미 완성되었습니다.
3단계 푸시 관련 코드 추가
OC인터페이스와 C++ 인터페이스중 택일.
다음 인터페이스는 OC 인터페이스입니다.
AppDelegate.mm에 [푸시] 관련 5종 방안을 추가하셔야 합니다.
1) 푸시 등록
서명 파일이 정확하게 설정되어야 푸시 등록이 완료됩니다. didFinishLaunchingWithOptions 메소드 안에서 MSDK의 WGRegisterAPNSPushNotification 메소드를 호출해 푸시 등록을 실시합니다. 코드 예시:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
…
[MSDKXG WGRegisterAPNSPushNotification:launchOptions];
…
}
2) 등록 성공
등록에 성공하면 게임에서 didRegisterForRemoteNotificationsWithDeviceToken 콜백 메소드를 수신할 수 있으며, 게임은 이 메소드 내에서 WGSuccessedRegisterdAPNSWithToken 메소드를 호출해 deviceToken을 MSDK에 보고합니다. 코드 예시:
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
[MSDKXG WGSuccessedRegisterdAPNSWithToken:deviceToken];
}
3) 등록 실패
등록에 실패하면 게임에서 didFailToRegisterForRemoteNotificationsWithError 메소드 콜백을 수신할 수 있으며, 게임에서 WGFailedRegisteredAPNS 메소드를 호출해 푸시 등록 실패를 MSDK에 통지합니다. 예시 코드:
-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
[MSDKXG WGFailedRegisteredAPNS];
}
4) 정보 수신
푸시 등록 성공 후에, 애플리케이션에서 푸시 정보를 수신하고 didReceiveRemoteNotification 메소드에 진입할 수 있습니다. 게임이 이 메소드에서 WGReceivedMSGFromAPNSWithDict 메소드 호출을 필요로 할 경우, 정보를 MSDK에 푸시해 분석하고, 분석 결과를 게임에 통지합니다. 예시 코드:
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
[MSDKXG WGReceivedMSGFromAPNSWithDict:userInfo];
}
5) badge 정리
애플리케이션이 applicationDidBecomeActive 안에서 WGCleanBadgeNumber 메소드를 호출해야 할 경우, 애플리케이션 바탕화면 아이콘 우측 상단 코너의 푸시 항목을 비웁니다. 예시 코드:
-(void)applicationDidBecomeActive:(UIApplication *)application
{
[MSDKXG WGCleanBadgeNumber];
}
다음 인터페이스는 C++ 인터페이스입니다.
AppDelegate.mm에 [푸시] 관련 5종 방안을 추가하셔야 합니다.
1) 푸시 등록
기능 설명
메시지 푸시를 등록 시, 시그니처 파일을 정확하게 설정해야 등록 가능합니다. 게임은 didFinishLaunchingWithOptions방안에서 MSDK의 WGRegisterAPNSPushNotification방안을 호출하여 푸시를 등록해야 합니다.
인터페이스 선언
void WGRegisterAPNSPushNotification(unsigned char *launchOptions);
파라미터 설명
파라미터 명칭 | 유형 | 설명 |
---|---|---|
launchOptions | unsigned char* | "-application:didFinishLaunchingWithOptions:"의 (NSDictionary *)launchOptions 파라미터를 json 스트링으로 컨버트함. |
2)등록 통과
기능 설명
등록 통과시 게임은 didRegisterForRemoteNotificationsWithDeviceToken 콜백 방안을 받아보며, 게임은 해당 방안의 WGSuccessedRegisterdAPNSWithToken방안을 호출하여 deviceToken을 MSDK에 업로드해야 합니다.
인터페이스 선언
void WGSuccessedRegisterdAPNSWithToken(unsigned char *deviceToken);
파라미터 설명
파라미터 명칭 | 유형 | 설명 |
---|---|---|
deviceToken | unsigned char* | "-application:didRegisterForRemoteNotificationsWithDeviceToken:"의 (NSData *)deviceToken 파라미터를 스트링으로 컨버트함. |
3) 등록 실패
기능 설명
등록 실패시 게임은 didFailToRegisterForRemoteNotificationsWithError 방안을 받아 콜백합니다. 이때 게임은WGFailedRegisteredAPNS방안을 호출하여 MSDK에 푸시 등록 실패를 알려야 합니다.
인터페이스 선언
void WGFailedRegisteredAPNS();
파라미터 설명
없음
4) 메시지 받아보기
기능 설명
푸시 등록에 통과하면 애플리케이션은 푸시 메시지를 받아 didReceiveRemoteNotification방안을 적용합니다. 게임은 해당 방안에서 WGReceivedMSGFromAPNS방안을 호출하여 푸시 메시지를 MSDK에 업로드 및 파싱(parsing)후 파싱 결과를 게임에 알려야 합니다.
인터페이스 선언
void WGReceivedMSGFromAPNS(unsigned char *userInfo);
파라미터 설명
파라미터 명칭 | 유형 | 설명 |
---|---|---|
userInfo | unsigned char* | "-application:didReceiveRemoteNotification:"中的(NSDictionary *)userInfo의파라미터를 json 스트링으로 컨버트함. |
5) badge 삭제
기능 설명
애플리케이션은 applicationDidBecomeActive에서 WGCleanBadgeNumber방안을 호출하여 애플리케이션 바탕화면 아이콘의 오른쪽 윗측에 푸시한 내용을 삭제해야 합니다.
인터페이스 선언
void WGCleanBadgeNumber();
파라미터 설명
없음
4단계 Demo 예시를 참고하십시오.
예시는, MSDKDemo/LoginSucceedVC.mm 파일의 onClickAddLocalNotification
, onClickAddLocalNotificationAtFront
, onClickClearLocalNotification, onClickSetPushTag
, onClickDeletePushTag
메소드를 참조하십시오.
푸시 정보 발송
페이잉(飞鹰) 시스템에 진입하여, 좌측 내비게이션창을 클릭해 MSDK 관리 -> 정보 관리(권한이 없는 경우 RTX에서 marsrabelma 마텅(马腾)에 연락해 권한을 획득할 수 있음)의 열린 화면 내에서 메시지(정식 환경)
버튼을 클릭해 정식 환경 하에서 +푸시 통지
버튼을 클릭해 푸시 정보를 클릭합니다. 아래 예시를 참조하십시오.
주의사항:
- 정보 푸시를 테스트할 때, 절대로 전체 푸시는 실행하지 마십시오. 하나의 계정 또는 여러 개의 계정을 이용해 테스트할 수 있으므로 전테 네트워크 사용자가 테스트 푸시 정보를 수신하도록 하지는 마십시오.
로컬 푸시 추가
원격 푸시 이외에도, 게임에서는 체력 회복 메시지 환경과 같은 로컬 정보 푸시도 가능합니다.
1 iOS 로컬 푸시
- 기능 설명
로컬 푸시는 원격 푸시와 비교할 때, 원격 서버와의 인터랙션 없이 로컬에서 바로 수행할 수 있는 정보 알림 기능이며, 주로 체력 회복 메시지 등의 환경에서 사용됩니다.
- 인터페이스 선언
long WGAddLocalNotification(LocalMessage &localMessage);
- 파라미터 설명
파라미터 명칭 | 유형 | 설명 |
---|---|---|
localMessage | LocalMessage 카테고리 | 이동 확인 |
- 반환값
1 추가 성공, 0 추가 실패
- 예시 코드
//현재 시간이 2015-09-17 17:00:00일 경우, 10초 후에 푸시
LocalMessage message;
message.fireDate = "2015-09-17 17:00:10";
message.alertBody = "Local Notification";
message.badge = 1;
message.alertAction = "Start";
KVPair item;
item.key = "key";
item.value = "vlaue";
std::vector<KVPair> userInfo;
userInfo.push_back(item);
message.userInfo = userInfo;
WGPlatform::GetInstance()->WGAddLocalNotification(message);
- 특수 설명
1) 해당 인터페이스는 게임이 백그라운드로 물러나거나 프로세스 취소 후에 로컬 푸시를 수신할 수 있습니다.
2) 사용자가 로컬 푸시를 클릭해 게임을 풀업하고 게임이 다양한 푸시에 따라 다양한 처리 방식을 채택해야 할 경우, AppController(UnityAppController)에서 아래와 같이 대행 메소드를 구현해야 합니다.
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
// 푸시 메시지 처리
NSLog(@"로컬 푸시 메시지 수신: %@ %@",notification.alertBody,notification.userInfo);
LocalMessage message;
message.alertBody = [notification.alertBody cStringUsingEncoding:NSUTF8StringEncoding];
std::vector<KVPair> userInfo;
for (NSString *key in notification.userInfo.allKeys)
{
NSString *value = notification.userInfo[key];
KVPair item;
item.key = [key cStringUsingEncoding:NSUTF8StringEncoding];
item.value = [value cStringUsingEncoding:NSUTF8StringEncoding];
userInfo.push_back(item);
}
message.userInfo = userInfo;
//게임에서 해당 message에 근거해 다양한 전략을 수립할 수 있습니다.
}
- 용어 해석
없음
2 로컬 프론트 푸시 추가
- 기능 설명
기본 로컬 푸시는 게임이 프론트에서 실행 시에 팝업을 표시할 수 없으며, WGAddLocalNotificationAtFront 인터페이스를 통해 지정된 푸시 팝업을 실행할 수 있습니다.
- 인터페이스 선언
long WGAddLocalNotificationAtFront(LocalMessage &localMessage);
- 파라미터 설명
파라미터 명칭 | 유형 | 설명 |
---|---|---|
localMessage | LocalMessage 카테고리 | 이동 확인 |
- 예시 코드
LocalMessage message;
message.alertBody = "Local Notification At Front";
message.userInfoKey = "FrontKey";
message.userInfoValue = "FrontValue";
WGPlatform::GetInstance()->WGAddLocalNotificationAtFront(message);
- 특수 설명
해당 인터페이스에는 푸시 시간을 설정하지 않아도 되며, 인터페이스 호출 완료 후에 즉시 표시되고 취소되지 않습니다.
- 용어 해석
없음
3 유효화되지 않은 로컬 푸시 삭제
- 기능 설명
WGClearLocalNotification 인터페이스를 사용해 아직 유효화되지 않은 로컬 푸시를 삭제할 수 있습니다.
- 인터페이스 선언
void WGClearLocalNotification(LocalMessage &localMessage);
- 파라미터 설명
파라미터 명칭 | 유형 | 설명 |
---|---|---|
localMessage | LocalMessage 카테고리 | 이동 확인 |
- 예시 코드
LocalMessage message;
//주: 이옧의 userInfoKey, userInfoValue는 푸시 추가 시와 일치해야 합니다. 그렇지 않을 경우, 취소가 불가능합니다.
message.userInfoKey = "key";
message.userInfoValue = "value";
WGPlatform::GetInstance()->WGClearLocalNotification(message);
- 특수 설명
없음
- 용어 해석
없음
4 로컬 푸시 제거
- 기능 설명
WGClearLocalNotifications 인터페이스를 사용해 모든 로컬 푸시를 삭제할 수 있습니다.
- 인터페이스 선언
void WGClearLocalNotifications();
- 파라미터 설명
없음
- 예시 코드
WGPlatform::GetInstance()->WGClearLocalNotifications();
- 특수 설명
없음
- 용어 해석
없음
태그 푸시
게임은 사용자에 대해 성별, 연령, 학력, 취미 등과 같은 태그를 설정할 수 있으며, 별도로 SDK 내에는 사전 설정된 기본 태그가 있어, 푸시 시에 다양한 태그 내용에 따라 푸시를 실시합니다.
1 태그 프리셋
현재 전서구(信鸽)는 다음 3개 유형의 프리셋 태그를 제공하며, 게임에서는 다른 설정을 필요로 하지 않습니다.
지리적 위치(성 1급)
애플리케이션 버전 번호
유실된 사용자(3일 또는 7일)
2 태그 설정
- 기능 설명
게임에서는 사용자에 대해서 다양한 태그를 설정할 수 있으며, 하나의 게임에 최대 10,000개의 태그 설정이 가능합니다. 각 사용자는 임의의 게임에서 최대 100개까지 태그를 설정할 수 있고, 태그 설정 시에는 태그 내에 공백이 있어서는 안 된다는 점에 주의해 주십시오.
- 인터페이스 선언
void WGSetPushTag(unsigned char* tag);
- 파라미터 설명
파라미터 명칭 | 유형 | 설명 |
---|---|---|
tag | unsigned char* | null이 되거나 공백을 포함할 수 없음 |
- 반환값
없음
- 예시 코드:
WGPlatform::GetInstance()->WGSetPushTag((unsigned char*)"Student");
- 특수 설명
없음
- 용어 해석
없음
3 태그 삭제
- 기능 설명
설정된 사용자 태그를 삭제하면, 푸시 시에 해당 사용자는 이 태그 아래의 푸시 정보를 수신할 수 없습니다.
- 인터페이스 선언
void WGDeletePushTag(unsigned char* tag);
- 파라미터 설명
파라미터 명칭 | 유형 | 설명 |
---|---|---|
tag | unsigned char* | null이 되거나 공백을 포함할 수 없음 |
- 반환값
없음
- 예시 코드
WGPlatform::GetInstance()->WGDeletePushTag((unsigned char*)"Student");
- 특수 설명
없음
- 용어 해석
없음
4 태그 푸시 정보 발송
태그 푸시 정보 발송은 푸시 정보 발송과 마찬가지로, 푸시 정보 추가 시에 다음과 같이 맞춤형 푸시 발송
그룹 범위를 선택해야 합니다.