================================================ Migration from GCM to FCM ================================================ .. note:: 최신 샘플 및 라이브러리는 아래 링크를 통해, 다운로드 받을 수 있습니다. - `샘플 5.1 FCM `_ 1. 개요 ========= Morpheus 플랫폼에서 제공하는 푸시 서비스 중, GCM을 FCM으로 변환하기 위한 문서이다. 2. 변환 순서 (Morpheus IDE 환경) ========= - Morpheus Project 를 Gradle 환경으로 변환 - Manifest.xml 수정 - AndroidManifest.xml GCM 속성을 FCM 으로 변환 - 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 수정 .. code-block:: xml Y 2.3. AndroidManifest.xml 수정 ---------------------------- 가. GCM 속성 제거 .. code-block:: xml 나. GCM 라이브러리 > FCM 라이브러리로 교체 - gcm.jar or google-play-gcm.jar : 제거 - mqtt*.jar : 교체 - pushLibrary.jar : 교체 - push_plugin*.jar : 유지 다. FCM 속성 추가 .. code-block:: xml 라. 사용자 퍼미션 추가 .. code-block:: xml 2.4. GCM 프로젝트를 FCM 프로젝트로 가져오기 -------------- 가. 이미 서비스 되고 있는 GCM의 환경(sender id / server key)를 FCM에서 유지합니다. 이유는, 이미 배포된 앱이 업그레이드 되기 전까지 동일하게 푸시 서비스를 받도록 유지해야 하기 때문입니다. 자세한 방법은 아래 링크의 Import your GCM project as a Firebase project 항목을 참고하시기 바랍니다. https://developers.google.com/cloud-messaging/android/android-migrate-fcm 2.5. 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.6. 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.7. build.gradle Sample [Morpheus IDE] --------------------------- .. 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] implementation fileTree(dir: 'mcoreLibs', include: '*.jar', exclude: ['android-support-v4.jar', 'google-play-gcm.jar']) implementation 'com.android.support:appcompat-v7:23.0.1' // fcm sdk implementation ('com.google.firebase:firebase-messaging:15.0.2') implementation ('com.firebase:firebase-jobdispatcher:0.8.5') } apply plugin: 'com.google.gms.google-services' 2.8. build.gradle Sample [AndroidStudio] --------------------------- - 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 23 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 { implementation files('libs/*.jar') implementation ('com.google.firebase:firebase-messaging:15.0.2') implementation ('com.firebase:firebase-jobdispatcher:0.8.5') } apply plugin: 'com.google.gms.google-services' 2.9. Gradle Build시 주의 사항 ------------------------------ .. warning:: 아래와 같이 Error가 발생하는 경우, dependencies 속성이 Gradle 버전과 맞지 않기 때문이므로, implementation 을 compile 로 변경한다. Error : A problem occurred evaluating project ':app'. > Could not find method implementation() for arguments