모든 문서(일반 문서, 분류 문서, 파일(이미지, 사운드 등) 문서)는 분류가 달려 있어야 합니다.
--Administrator (토론)
Push 모듈 적용 가이드 (Android)
Com2uS 공통모듈 | >> | Push | >> | Push 모듈 적용 가이드 (iOS)
Push 모듈 적용 가이드 (Android) |
>> | Push 모듈 레퍼런스 가이드 (iOS) | >> | Queuing Single Push API | >> | Push 샘플 가이드 (iOS) | >> | Push FAQ |
모듈 적용 전, Push 모듈 UI 및 기능 (Android) 문서 및 Push/기획 문서를 통해 Push 모듈의 동작 전반에 대한 이해가 필요하다.
목차 |
역사
Version | Date | SVN Revision | 담당자 | 변경 사항 |
---|---|---|---|---|
3.6.4 | 2020-06-16 | - | 김현석 |
|
3.6.3 | 2020-03-12 | - | 김현석 |
|
3.6.2 | 2020-01-23 | - | 김현석 |
|
3.6.1 | 2019-12-18 | - | 최지수 |
|
3.6.0 | 2019-10-16 | - | 최지수 |
} |
3.5.2 | 2019-06-25 | - | 최지수 |
[라이브러리 및 리소스 배포 변경사항]
} |
3.5.0 | 2019-03-14 | 2859 | 최지수 |
} |
3.4.0edit | 2018-11-02 | 2846 | 최지수 |
} |
3.4.0 | 2018-08-31 | 2844 | 최지수 |
|
3.3.9 | 2018-05-02 | 2838 | 최지수 |
|
3.3.8 | 2017-12-08 | 2828 | 최지수 |
|
3.3.6 | 2017-09-20 | 2820 | 최지수 |
|
3.3.6 | 2017-09-20 | 2820 | 최지수 |
|
3.3.5 | 2017-08-28 | 2816 | 최지수 |
|
3.3.4 | 2017-01-26 | 2803 | 정다운 |
|
3.3.3 | 2016-11-21 | 2795 | 정다운 |
|
3.3.2 | 2016-05-26 | 2774 | 정다운 |
|
3.3.1 | 2016-04-12 | 2769 | 김규진 | |
3.3.0 | 2016-03-17 | 2753 | 김규진 |
(C2SPush.h 참고) typedef enum { //... (중략) USER_NOTICE = 0x04, //추가됨 USER_NIGHT = 0x08 //추가됨 //... (중략) } Push_UserSetting; |
3.2.3 | 2016-01-26 | 2749 | 김규진 |
|
3.2.1 | 2016-01-04 | 2738 | 김규진 |
|
3.0.7 | 2015-08-26 | 2714 | 김규진 | |
3.0.6 | 2015-08-20 | 2712 | 김규진 | |
3.0.5 | 2015-08-10 | 2707 | 김규진 |
|
3.0.3 | 2015-08-06 | 2706 | 김규진 |
|
3.0.2 | 2015-06-23 | 2692 | 김규진 |
- GCMIntentService 에서 senderId 세팅 override 추가
|
3.0.1 | 2015-06-22 | 2691 | 박가진 |
|
3.0.0 | 2015-05-13 | 2666 | 김규진 |
|
모든 버전의 역사 보기
공통 유의 사항
내용 없음.
Android 유의 사항
AndroidManifest.xml 적용 시
- 총 4곳의 your-package-name 이라는 부분이 있으며, 이부분은 실제 project 의 packageName 으로 넣어주어야 한다. 사내에서 발급하는 appid 를 넣으면 안된다.
- 특히 modulemanager 에서 지정해준 appid 를 이곳에 넣으면 안된다.
- 가끔 .permission을 package-name 뒷부분에 빠뜨릴 수 있으니 주의!
테스트 서버는 사용하지 않음
- 2가지의 생성자 중 Push(Activity activity, boolean useTestServer, boolean useCLibrary) 를 사용하여 2번째 boolean 값으로 설정이 가능한데, 내부 테스트용 및 특별한 상황에서 디버그용으로만 사용됨
LocalPush 를 쓰지않는 등, C 쪽 함수를 쓰지 않아 C Library 를 제외 시켜야 할 경우
- MainActivity.java 의 modulemanager 에서 수정.
- ex) mModuleManager.setConfig(ModuleConfig.Push.NOT_USE_CLIBRARY);
- ex) mModuleManager.setConfig(ModuleConfig.Push.USE_TEST_SERVER | ModuleConfig.Push.NOT_USE_CLIBRARY);
- ModuleManager 참조.
Log on / off 설정 방법
- MainActivity.java 의 modulemanager 에서 수정.
- mModuleManager.setLogged(boolean b);
- mModuleManager.setConfig는 load 전에 호출되어야 합니다.
Push v3.4.0 이상 사용 시 FCM 설정 방법
- FCM 설정 시 크게 3가지 요소를 설정해야 합니다. (AndroidManifest.xml / fcm_settings.xml / Firebase프로젝트 참조)
- 아래 'Android 적용 방법' 내용을 꼭 확인바랍니다.
Push v3.5.0 이상 사용 시 Push v4 에 대해
- Push v3.5.0 부터는 기존의 Push 시스템(Push v1, AS-IS)이 아닌 새 Push 시스템(Push v4, TO-BE)를 제공합니다.
- 기존의 Push v1은 리모트 푸시를 사용 시 단말 식별자인 DID를 통해서 메시지 타겟팅을 하였다면, Push v4 는 유저 식별자인 UID를 통하여 메시지 타겟팅이 가능합니다.
- Push v4를 적용하기 위해 클라이언트 로직은 크게 수정할 필요 없습니다.
- 다만, Push v4를 사용하기 위해선 ActiveUser 모듈과 초기화 시점을 조정하고, 유저 식별자인 UID를 서버로 전송하는 새 API를 호출해야 합니다.
- 관련 내용은 아래 '파트 4'의 'Android 적용 방법'에서 Push v3.5.0 적용 특이사항을 다루며 설명하도록 하겠습니다.
Android 적용 방법
Push가 필요로하는 외부 라이브러리 설정 (v3.3.9 이후부터)
- Push v3.3.9부터 Android Support v4 라이브러리(27.1.0 버전)을 필요로 합니다.
- Android 8.1.0 이상 버전 대응으로 Support v4 라이브러리의 NotificationCompat.Builder 클래스를 사용하게 되는데 26.x.x 버전에서 해당 클래스의 생성자 형태가 변경되어 AndroidManifest.xml에서 BuildTarget이 26 이상일 경우 ActiveUser.start 메서드 이후 크래시가 발생할 수 있습니다. (Push v3.3.9 이하에서 발생, BuildTarget이 26 미만일 경우 특이사항 없음)
- BuildTarget 26 이상을 지원하기 위해 프로젝트에 포함된 Android Support v4 라이브러리(버전 27.1.0)를 참조 부탁드립니다.
- Peppermint v2.6.7 이상을 사용하는 경우
- Peppermint v2.6.7에 포함된 Facebook 4.18 라이브러리에는 동일한 Android Support v4 라이브러리가 포함되어 있습니다.
- 중복 사용되어 빌드 시 에러가 나지 않도록 Facebook 4.18에 포함된 Android Support v4만 사용 부탁드립니다.
- Push v3.3.9부터 참조하고 있는 Support v4 라이브러리 목록
- Push v3.4.0부터 GCM 서비스가 아닌 FCM을 사용하여 푸시를 작동합니다.
- FCM을 사용하기 위해서는 서클 패키지에 포함된 3개의 Firebase 라이브러리와 3개의 빨간색으로 표시된 Google Play Services 라이브러리를 메인 프로젝트의 참조 프로젝트로 추가합니다. (만약 게임 프로젝트에서 PGS 기능이나 Google Plus등의 기능을 사용하고 있다면 아래의 Google Play Services 라이브러리 9개 모두를 추가해야 합니다.)
[Firebase]
- Firebase-common v11.2.0
- Firebase-iid v11.2.0
- Firebase-messaging v11.2.0
[Google Play Services]
- Play-services-base-11.2.0 (FCM 사용을 위해서는 필수)
- Play-services-basement-11.2.0 (FCM 사용을 위해서는 필수)
- Play-services-tasks-11.2.0 (FCM 사용을 위해서는 필수)
- Play-services-auth-11.2.0
- Play-services-auth-api-phone-11.2.0
- Play-services-auth-base-11.2.0
- Play-services-drive-11.2.0
- Play-services-games-11.2.0
- Play-services-plus-11.2.0
각 라이브러리는 필수로 참조해야하는 하위 라이브러리가 존재합니다. 아래의 하위 라이브러리 참조 상태(Properties)를 확인하여 동일하게 설정합니다. (Firebase-common, Firebase-iid, Firebase-messaging)
Google Play Services v11.2.0 라이브러리 설정 방법은 Android Peppermint 설정 페이지의 Google Play Services v11.2.0 설정 부분을 확인바랍니다.
- Firebase v11.2.0 라이브러리 적용 시 firebase-common, firebase-iid 라이브러리의 AndroidManifest.xml 내에 applicationId 항목을 설정해야 합니다.
- 이클립스에서 빌드하는 경우 firebase-common, firebase-iid에 포함된 AndroidManifest.xml의 ${applicationId} 구문이 빌드되지 않습니다. 해당 위치에 packageName을 직접넣어 설정합니다.
- Android Studio에서 빌드하는 경우${applicationId} 구문에 packageName이 자동으로 대체 됩니다.
Jar 파일 추가
MainActivity.java
import com.com2us.module.push.PushCallback;
public class MainActivity extends Activity implements PushCallback
{
Push push = null;
@Override
public void onCreate(Bundle savedInstanceState) {
//push = new Push(this); //deprecated in v3.0.0
push = Push.getInstance(this);
/** optional
push.setLogged(false);
push.setUseTestServer(false);
push.setExtendsSenderIDs("1234567");
push.setUseThirdPartyPush(false);
*/
push.start();
}
@Override
protected void onDestroy() {
push.destroy();
}
@Override
protected void onResume() {
super.onResume();
push.onActivityResumed(); // 3rdPartyPush가 통합되며 필요해진 부분
}
@Override
protected void onPause() {
push.onActivityPaused(); // 3rdPartyPush가 통합되며 필요해진 부분
super.onPause();
}
}
AndroidManifest.xml
- targetSdkVersion의 값이 28 이상인 경우
- application 태그에 usesCleartextTraffic 설정을 추가해야 합니다. (http:// 관련 통신이 가능하도록)<application
.. (기타 설정) ..
android:usesCleartextTraffic="true" />
- application 태그에 usesCleartextTraffic 설정을 추가해야 합니다. (http:// 관련 통신이 가능하도록)
- Android Push v3.4.0 미만 버전에서 GCM 사용시
<permission android:name="your-package-name.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="your-package-name.permission.C2D_MESSAGE"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<application>
<!-- Push begin -->
<activity
android:name="com.com2us.module.push.ShowMsgActivity"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.Translucent" />
<activity
android:name="com.com2us.module.push.NotificationMessage"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.Translucent" />
<activity
android:name="com.com2us.module.push.PushWakeLock"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.Translucent" />
<receiver
android:name="com.com2us.module.push.LocalPushReceiver"
android:process=":remote" />
<receiver android:name="com.com2us.module.push.DeviceStatusReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.TIME_SET" />
<category android:name="your-package-name" />
</intent-filter>
</receiver>
<!-- GCM setting start -->
<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
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="your-package-name" />
</intent-filter>
</receiver>
<service android:name="com.com2us.module.push.GCMIntentService" />
<!-- GCM setting end -->
<!-- Push end -->
</application>
Amazon Push, JPush 등의 3rd Party Push를 사용하는 경우, 여기를 참고하여 Permission 사용에 대한 설정을 한다. |Android.mk =
- Android Push v3.4.0 이상 버전에서 FCM 사용시
- Android P에서 GCM 서비스 기능을 더 이상 사용할 수 없어 FCM(Firebase Cloud Messaging) 기능을 사용합니다. (FCM setting 안에 packageName 설정 부분이 2군데 있습니다. 주의해주세요!)
<permission android:name="your-package-name.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="your-package-name.permission.C2D_MESSAGE"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<application>
<!-- Push begin -->
<activity
android:name="com.com2us.module.push.ShowMsgActivity"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.Translucent" />
<activity
android:name="com.com2us.module.push.NotificationMessage"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.Translucent" />
<activity
android:name="com.com2us.module.push.PushWakeLock"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.Translucent" />
<receiver
android:name="com.com2us.module.push.LocalPushReceiver"
android:process=":remote" />
<receiver android:name="com.com2us.module.push.DeviceStatusReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.TIME_SET" />
<category android:name="your-package-name" />
</intent-filter>
</receiver>
<!-- 기존의 GCM 설정 기능은 제거합니다. -->
<!-- GCM setting start -->
<!--<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
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="your-package-name" />
</intent-filter>
</receiver>
<service android:name="com.com2us.module.push.GCMIntentService" />-->
<!-- GCM setting end -->
<!-- FCM setting start -->
<service android:name="com.com2us.module.fcm.MessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service
android:name="com.google.firebase.iid.FirebaseInstanceIdService"
android:exported="true" >
<intent-filter android:priority="-500" >
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true"
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="com.com2us.hivesdk.normal.freefull.google.global.android.common"/> <!-- appid 설정 -->
</intent-filter>
</receiver>
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver"
android:exported="false" >
<intent-filter android:priority="-500">
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</receiver>
<provider
android:authorities="com.com2us.hivesdk.normal.freefull.google.global.android.common.firebaseinitprovider"
android:name="com.google.firebase.provider.FirebaseInitProvider"
android:exported="false"
android:initOrder="100" /> <!-- authorities에 appid 설정 -->
<!-- FCM setting end -->
<!-- Push end -->
</application>
Resource
- FCM 설정 파일(fcm_settings.xml)을 제외한 Resource 추가는 선택 사항임.
- Android Push v3.4.0 이상 적용시 fcm_settings.xml은 필수입니다. 하단에 'fcm_settings.xml 설정' 내용을 확인해주세요!!
- Push_모듈_UI_및_기능_(Android)#Custom_Popup 참고
fcm_settings.xml 설정
- FCM 설정을 위해선 Firebase 콘솔 페이지(https://console.firebase.google.com)에 로그인하여 프로젝트를 등록합니다.
- 그 다음, 프로젝트 설정 항목에서 google-service.json 파일을 다운로드 합니다. (google-service.json 파일 다운로드 방법 : https://support.google.com/firebase/answer/7015592?hl=ko)
- 이후, 프로젝트의 /res/values 경로에 fcm_settings.xml 파일을 생성하고, google-service.json 파일을 열어 내용에 포함된 주요 키 값을 아래와 같이 설정합니다.
- (gcm_defaultSenderId는 424963100196를 항상 사용하도록 설정 부탁드립니다.)
<!-- google-service.json 경로 : fcm_settings.xml 키 -->
<!-- (1) client > oauth_client > client_id : default_web_client_id -->
<!-- (2) project_info > firebase_url : firebase_database_url -->
<!-- (3) project_info > project_number : gcm_defaultSenderId (424963100196 고정)-->
<!-- (4) client > api_key > current_key : google_api_key -->
<!-- (5) client > client_info > mobilesdk_app_id : google_app_id -->
<!-- (6) project_info > storage_bucket : google_storage_bucket -->
<!-- fcm_settings.xml 설정 내용 -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="default_web_client_id" translatable="false">123456789101-a12bcd34e5fghijk67abcdefghi8abde.apps.googleusercontent.com</string>
<string name="firebase_database_url" translatable="false">https://hive-sdk-1234567.firebaseio.com</string>
<string name="gcm_defaultSenderId" translatable="false">424963100196</string>
<string name="google_api_key" translatable="false">AbcdEfGHIjk0LMnopQRsTUv2Wx3YzabcD45eFGh</string>
<string name="google_app_id" translatable="false">1:123456789101:android:1a234bd567ef8g9h</string>
<string name="google_storage_bucket" translatable="false">hive-sdk-1234567.appspot.com</string>
</resources>
Customizing Dialog & Toast
Example Source ( push_dialog.xml )
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pushdialog_root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="10dp"
android:background="#a0000000"
>
<TextView
android:id="@+id/pushdialog_title"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="#FFF" />
<LinearLayout
android:id="@+id/pushdialog_body"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:padding="10dp" >
<ImageView
android:id="@+id/pushdialog_icon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginRight="10dp" />
<TextView
android:id="@+id/pushdialog_msg"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="#FFF" />
</LinearLayout>
</LinearLayout>
xml 내용은 기획에 따라 변경 하고, 파일 이름과 아래에 해당하는 ID 값은 변경하면 안된다.
Customize Dialog
- File Name : push_dialog.xml
- Root Layout ID : pushdialog_root
- (TextView) Title ID : pushdialog_title
- (ImageView) Icon ID : pushdialog_icon
- (TextView) Msg ID : pushdialog_msg
Customize Toast
- File Name : push_toast.xml
- Root Layout ID : pushtoast_root
- (TextView) Title ID : pushtoast_title
- (ImageView) Icon ID : pushtoast_icon
- (TextView) Msg ID : pushtoast_msg
Customize Dialog의 경우, Dialog를 터치하면 해당 Push가 실행되고 Back버튼이나 Dialog 바깥을 터치하면 닫기가 된다. (Show, Close 버튼을 영역 터치로 대체)
Customizing Notification
Example Source ( push_notification.xml )
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<!-- Icon/Photo -->
<ImageView
android:id="@+id/pushnotification_icon"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginRight="8dp"
android:scaleType="centerCrop" />
<!--
android:padding="8dp"
android:background="#1E3740"
-->
<!-- Timestamp -->
<TextView
android:id="@+id/pushnotification_timestamp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginTop="8dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="8dp"
android:textSize="12sp" />
<!-- Title/Name -->
<TextView
android:id="@+id/pushnotification_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@id/pushnotification_icon"
android:layout_toLeftOf="@id/pushnotification_timestamp"
android:layout_marginRight="4dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="#FFFFFF"
android:textSize="18sp"
android:textStyle="bold" />
<!-- SmallIcon -->
<ImageView
android:id="@+id/pushnotification_smallicon"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_alignParentRight="true"
android:layout_below="@id/pushnotification_timestamp"
android:layout_marginLeft="4dp"
android:layout_marginTop="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
android:scaleType="centerCrop" />
<!-- ContentInfo -->
<TextView
android:id="@+id/pushnotification_contentinfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/pushnotification_timestamp"
android:layout_toLeftOf="@id/pushnotification_smallicon"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:text=""
android:textSize="12sp" />
<!-- Message -->
<TextView
android:id="@+id/pushnotification_msg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@id/pushnotification_icon"
android:layout_toLeftOf="@id/pushnotification_contentinfo"
android:layout_below="@id/pushnotification_title"
android:layout_marginRight="4dp"
android:gravity="center_vertical"
android:ellipsize="end"
android:maxLines="2"
android:textSize="14sp" />
<!-- BigTextMessage -->
<!--
<TextView
android:id="@+id/pushnotification_bigmsg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@id/pushnotification_icon"
android:layout_toLeftOf="@id/pushnotification_contentinfo"
android:layout_below="@id/pushnotification_title"
android:layout_marginRight="4dp"
android:gravity="center_vertical"
android:ellipsize="end"
android:maxLines="2"
android:textSize="14sp" />
-->
</RelativeLayout>
xml 내용은 기획에 따라 변경 하고, 파일 이름과 아래에 해당하는 ID 값은 변경하면 안된다.
Customize Notification
- File Name : push_notification.xml
- (ImageView) Icon ID : pushnotification_icon
- (TextView) Title ID : pushnotification_title
- (TextView) Msg ID : pushnotification_msg
- (TextView) BigMsg ID : pushnotification_bigmsg
- (TextView) TimeStamp ID : pushnotification_timestamp
- (TextView) Info ID : pushnotification_contentinfo
- (ImageView) SmallIcon ID : pushnotification_smallicon
|main.xml = |string.xml =
게임 소스 (C, C++)
// 기본적으로 로컬푸시를 사용하지 않으면 아무 설정을 하지 않아도 된다.
// 나머지 함수들은 함수 설명 참조.
...
Push v3.5.0 이상 적용 시 필수사항 (Push v4)
Push v3.5.0 이상부터 Push v4가 적용된 로직을 따르며 이로 인해 몇 가지 지켜야할 필수 사항이 있습니다.
(1) ActiveUser 초기화가 먼저 완료된 후 Push 초기화를 진행
- ActiveUser에서 약관 동의 시 'Push 공지 / Push 야간 공지' 동의 여부에 대한 정보를 Push 모듈이 수집할 수 있게 ActiveUser 초기화 완료 후 Push 모듈을 초기화 합니다.
- (ActiveUser의 CS_ActiveUserStartEx() API 완료 후 Push의 CS_PushStartEx() API를 호출)
- Push v3.5.0 이상부터 CS_PushStartEx() API가 새로 구성되었습니다. 기존의 CS_PushStart() API와 동일한 역할을 하나 호출 시점이 중요하니 꼭 확인바랍니다.
- (CS_PushStartEx() API는 Unity 플러그인과 C 플러그인으로도 제공)
(2) 유저 식별자를 서버에 전달하는 API 호출
- Push v3.5.0 이상부터 Push 고도화 시스템이 적용된 로직을 따르며 유저 식별 메시지 타겟팅을 위해 Push 서버로 UID를 전송해야할 필요가 있습니다.
- UID 전송을 위해선 Push v3.5.0에서 새로 구성된 setUID(String uid)를 호출해야하며 호출 시점은 Peppermint 모듈을 통해 게스트 혹은 HIVE 로그인이 이루어진 후(Peppermint 로그인 성공 콜백은 받은 뒤) UID를 획득 한 후 입니다.
(3) HIVE 로그아웃 시 유저 식별자 정보를 초기화 할 수 있도록 API 호출
- HIVE 유저가 로그아웃 시 Push v4 모듈과 서버가 로그아웃 상태임을 인지할 수 있도록 유저 식별자 정보를 초기화 해야할 필요가 있습니다.
- HIVE 유저가 로그아웃 시 (2) 항목에서 호출하였던 setUID(String uid) API에 파라미터를 String uid = "" 혹은 String uid = null로 입력하여 호출해야 합니다.
- (게스트 유저는 로그아웃이 없으므로 호출할 필요가 없습니다.)
(1), (2), (3) 에 해당하는 시점을 아래 플로우에서 확인할 수 있습니다.
- 주의사항! CS_pushSetUid를 호출하여 UID에 푸시 관련 정보가 매칭된 후, CS_pushGetAgreeNotice/CS_pushGetAgreeNight를 호출하여 앱에서 푸신 여부 UI를 생성에 사용해주세요.
- CS_pushSetUid 이전에 agree/night 값을 get하려는 경우 올바른 정보가 반환되지 않을 수 있습니다.
Android Studio 적용하기 (190625 배포 이후)
1) .aar 라이브러리 추가하기
- 배포된 패키지에 있는 Push-x.x.x.aar 라이브러리를 프로젝트가 추가합니다.
- build.gradle 설정에서 해당 .aar 파일을 implementation하여 빌드되도록 설정합니다.
2) 통합 리소스 및 수정설정 리소스 추가하기
- 리소스 가이드에 있는 통합 리소스와 수정설정 리소스를 프로젝트에 추가합니다. [리소스 추가하기]
3) Push 라이브러리가 필요로하는 외부 라이브러리를 추가하기
- Push 라이브러리는 Android Support 라이브러리 등 외부 라이브러리를 필요로 합니다. 아래 라이브러리를 build.gradle의 dependencies 항목에 추가하여 같이 사용하도록 합니다.
- 또한 Android Push는 Firebase Cloud Messaging 서비스를 사용합니다. FCM은 구글 라이브러리를 추가로 필요로 합니다. 아래 라이브러리를 build.gradle의 dependencies 항목에 추가하여 같이 사용하도록 합니다.
dependencies {
// ...(생략)...
// Android Support 라이브러리
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
// FCM 라이브러리
implementation 'com.google.firebase:firebase-iid:20.0.0' // Push v3.6.3+
implementation 'com.google.firebase:firebase-messaging:20.0.0' // Push v3.6.3+
// Google Play Services 라이브러리
implementation 'com.google.android.gms:play-services-auth:17.0.0' // Push v3.6.3+
implementation 'com.google.android.gms:play-services-ads-identifier:17.0.0' // Push v3.6.3+
}
//...(생략)...
4) gradle.properties 파일 내 androidX 사용 설정
- gradle.properties 파일 내 아래의 코드를 추가하세요. gradle.properties 파일이 존재하지 않는 경우 신규 생성 후 아래의 코드를 추가하세요.
android.enableJetifier=true
Debug
- Push
- Push의 기본적인 로그가 찍히는 Tag
Known Bugs
- 게임이 Recent 항목에 남아있을 때 화면이 잠겨진 상태에서 web을 띄우는 Popup이 노출되어 확인을 눌러 web을 띄웠을 때, Recent 항목에서 게임이 사라지고 WebBrowser만 남는 현상. (게임은 그대로 Pause 상태 유지)
- 정상종료시엔 남아있지만, 강제종료 시 등록된 LocalPush 가 사라집니다. 단말 재부팅이나 어플실행시 다시 등록됩니다.
Com2uS 공통모듈 | >> | Push | >> | Push 모듈 적용 가이드 (iOS)
Push 모듈 적용 가이드 (Android) |
>> | Push 모듈 레퍼런스 가이드 (iOS) | >> | Queuing Single Push API | >> | Push 샘플 가이드 (iOS) | >> | Push FAQ |