================================================ Migration from UPNS Below 5.0 to 5.1 ================================================ .. note:: 최신 샘플 및 라이브러리는 아래 링크를 통해, 다운로드 받을 수 있습니다. - `샘플 5.1 MADP [UPNS+FCM] - 모피어스 플랫폼 연동 `_ - `샘플 5.1 NATIVE [UPNS+FCM] - 네이티브 `_ 1. 개요 ========= Morpheus 플랫폼에서 제공하는 푸시 서비스 중, UPNS 5.0 이하 버전을, UPNS 5.1로 변환하기 위한 문서이다. .. warning:: google paly 정책변경으로, targetSDK26 이상 빌드 / 배포 필요 - 신규 앱 : 2018.08. 이후 - 기존 앱 : 2018.11. 이후 targetSDK 26 이상은 BackgroundService API 사용 제약으로, JobScheduler or JobDispatcher 가 적용되어야 함에 따라 5.1 마이그레이션이 필요함 2. 변환 순서 (Morpheus IDE 환경) ========= - Morpheus Project 를 Gradle 환경으로 변환 - AndroidManifest.xml GCM 속성을 FCM 으로 변환 - AndroidManifest.xml UPNSService 를 UPNSJobSerivce 로 변경 - Manifest.xml use-permission 속성 추가 - AndroidManifest.xml MPUSH_PERMISSION 속성 추가 - FCM console 에서 google-service.json 파일 다운로드 및 적용 - build.gradle 설정 2.1. Morpheus Project 를 Gradle 환경으로 변환 ---------------------------------- 가. 방법 1 (Android Studio 이용) - `Android Studio 와 같이 이용하기 `_ 나. 방법 2 (모피어스 IDE 기능 이용) - `Morpheus Project에서 Gradle Build 이용하기 `_ 2.2. Manifest.xml 수정 ---------------------------- 가. use-permission 속성 추가 .. code-block:: xml Y 2.3. AndroidManifest.xml 수정 ---------------------------- 가. GCM 속성 제거 .. code-block:: xml 나. FCM 속성 추가 .. code-block:: xml 다. UPNS 속성 [BackgroundService] 제거 .. code-block:: xml 라. UPNS 속성 [Scheduler] 추가 .. code-block:: xml 마. MPUSH_PERMISSION 속성 추가 .. code-block:: xml 바. FOREGROUND_SERVICE 속성 추가 .. code-block:: xml 2.4 FCM console 에서 google-service.json 파일 다운로드 및 적용 ------------------- 가. google-service.json 다운로드 방법 : https://support.google.com/firebase/answer/7015592 https://console.firebase.google.com/u/0/ .. figure:: ../_static/push/android/fcm/google-service.json.png :width: 80% 나. 적용 위치 : app/ 또는 module 모피어스 프로젝트의 경우, 프로젝트 root에 저장 2.5. Gradle Settings ---------------------------------------------- - dependencies 선언(적용 버전은 유동적임) .. code-block:: javascript implementation ('com.google.firebase:firebase-messaging:15.0.2') - apply plugin 선언(build.gradle 최하단에 위치 해야 함) .. code-block:: javascript apply plugin: 'com.google.gms.google-services' 2.6. build.gradle Sample [Morpheus IDE] --------------------------- .. warning:: Gradle은 예시이므로, 프로젝트 상황에 맞게 재구성 필요 - Sample [Project] .. code-block:: javascript buildscript { repositories { jcenter() maven {url "https://maven.google.com"} maven {url "https://jcenter.bintray.com"} } dependencies { classpath 'com.android.tools.build:gradle:3.0.1' classpath 'com.google.gms:google-services:3.1.0' classpath 'com.github.ksoichiro:gradle-eclipse-aar-plugin:+' } } apply plugin: 'com.android.application' apply plugin: 'com.github.ksoichiro.eclipse.aar' repositories { jcenter() maven {url "https://maven.google.com"} maven {url "https://jcenter.bintray.com"} } android { compileSdkVersion 27 buildToolsVersion "27.0.2" sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] jniLibs { srcDir 'libs' } } instrumentTest.setRoot('tests') debug.setRoot('build-types/debug') release.setRoot('build-types/release') } defaultConfig { multiDexEnabled true } dexOptions { preDexLibraries = false } lintOptions { checkReleaseBuilds false abortOnError false } buildTypes { release { //minifyEnabled true //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' } } } dependencies { //구버전 중 빌드시 불 필요한 라이브러리는 exclude 처리 한다. [support-v4, gcm] compile fileTree(dir: 'mcoreLibs', include: '*.jar', exclude: ['android-support-v4.jar', 'google-play-gcm.jar']) compile 'com.android.support:appcompat-v7:23.0.1' // fcm sdk (필수) implementation ('com.google.firebase:firebase-messaging:15.0.2') // JobScheduler sdk (필수) implementation 'com.firebase:firebase-jobdispatcher:0.8.5' } apply plugin: 'com.google.gms.google-services' 2.7. build.gradle Sample [AndroidStudio] --------------------------- .. warning:: Gradle 환경은 예시이므로, 프로젝트 상황에 맞게, 라이브러리 및 라이브러리 버전 재구성 필요 - Sample [Project] .. code-block:: javascript buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.1.2' classpath 'com.google.gms:google-services:3.1.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir } - Sample [Module] .. code-block:: javascript apply plugin: 'com.android.application' repositories { maven { url 'https://maven.google.com' } } android { compileSdkVersion 26 buildToolsVersion "26.0.2" defaultConfig { applicationId "kr.co.pushdemo" minSdkVersion 14 targetSdkVersion 26 multiDexEnabled true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies { //구버전 중 빌드시 불 필요한 라이브러리는 exclude 처리 한다. [support-v4, gcm] implementation files('libs/*.jar', exclude: ['android-support-v4.jar', 'google-play-gcm.jar']) implementation 'com.android.support:support-v4:26.1.0' // fcm sdk (필수) implementation ('com.google.firebase:firebase-messaging:15.0.2') // JobScheduler sdk (필수) implementation 'com.firebase:firebase-jobdispatcher:0.8.5' } apply plugin: 'com.google.gms.google-services' 2.8. Gradle Build시 주의 사항 ------------------------------ .. warning:: 아래와 같이 Error가 발생하는 경우, dependencies 속성이 Gradle 버전과 맞지 않기 때문이므로, implementation 을 compile 로 변경한다. Error : A problem occurred evaluating project ':app'. > Could not find method implementation() for arguments 2.9. AndroidManifest.xml 예시 ------------------------------ .. code-block:: xml 2.10. Manifest.xml 예시 ------------------------------ .. code-block:: xml n y 5.0 http://xxx.xxx.148.97:8080 20000 xxxxxxx ALL device mobile Y inapp 120 auto