[Android] 구글 클라우드 메시징(GCM)의 새 버전, Firebase Cloud Messaging(FCM)
Developer Console의 GCM 통계 및 GCM 진단은 FCM 통계 및 FCM 진단으로 변경됩니다.
Firebase Cloud Messaging을 사용할 때 설정 등을 변경할 필요는 없지만 업그레이드 후에는 다양한 새로운 기능을 사용할 수 있습니다.
구글 Play Developer Console에서 계속 이렇게 말하는 게 마음에 걸려요.
따라서 기본적으로 GCM과 변화가 없기 때문에 GCM을 FCM으로 바꾸다
우리 집 문서는 여기 있습니다.
https://firebase.google.com/docs/android/setup
Firebase 콘솔에서 설정
1. Firebase 콘솔에서
2. 항목 만들기
만약 이미 있다면 그것을 이용하시오
3. "Android 앱에 Firebase 추가" 클릭
ios에도 ios가 있어요.
4. 응용 프로그램의 패키지 이름 입력
플레이에 공개된 가방 이름입니다.적당히 테스트하는 응용 프로그램의 포장 이름도 k.
5. 디버깅에 사용할 서명 인증서 해싱 키
https://developers.google.com/android/guides/client-auth
참고로 GCM 설치가 완료된 경우 https://console.developers.google.com/ 에 산열 키를 넣어야 하므로 복사하여 붙여넣으면 됩니다.
완료 후 구글 서비스.제이슨 같은 거 얻을 수 있어.
메쉬 편집
1. google-service.json을 얻을 수 있기 때문에 앱 모듈에 설정된 계층
부드럽게 설명하고 싶어요, 이렇게.
google-service.json은 만든 프로젝트의 정보만 쓴 당신의 파일입니다.그 응용 프로그램 전용 파일입니다.
프로젝트의 주요 모듈의 차원 구조에 위치한다.
2. 프로젝트(상층)의build.gradle 편집
classpath 'com.google.gms:google-services:3.0.0’buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
classpath 'com.android.tools.build:gradle-experimental:0.2.0'
// これを追加
classpath 'com.google.gms:google-services:3.0.0'
}
}
3. 응용 모듈의build.gradle 편집
다음 내용이 필요하지 않으니까 삭제하도록 하겠습니다.
com.google.android.gms:play-services-gcm:9.0.2
대신 다음과 같은 내용을 추가하다
com.google.firebase:firebase-messaging:9.0.2
com.google.firebase:firebase-messaging:9.0.2
맨 아래에 다음 내용을 추가합니다.
apply plugin: 'com.google.gms.google-services'apply plugin: 'com.android.application'
android {
}
dependencies {
// これはいらなくなる
//compile 'com.google.android.gms:play-services-gcm:9.0.2'
compile 'com.google.firebase:firebase-core:9.0.2'
compile 'com.google.firebase:firebase-messaging:9.0.2'
// 今回は関係ないけど、Firebaseアナリティクスも試したい方はこれも入れる
compile 'com.google.firebase:firebase-analytics:9.0.2'
}
// 一番下に追加
apply plugin: 'com.google.gms.google-services'
컴파일이 통과되지 않을 때,classpath'com.google.gms: 구글 서비스: 3.0.00', 또는 구글 서비스.제이슨 같은 거 안 놓은 걸로 알고 있어요.
코드 바꾸기
1. 권한 삭제
manifest 파일.FCM에서 필요하지 않으므로 제거<!--
<uses-permission android:name="android.permission.WAKE_LOCK" />
<permission android:name="<your-package-name>.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="<your-package-name>.permission.C2D_MESSAGE" />
-->
2. 레지스트리 항목 삭제
manifest 파일.등록표 항목은 더 이상 성명을 필요로 하지 않는다
fcm의 sdk는 자동으로 할 수 있을 것 같습니다.편리하다<!--
<receiver
android:name="com.google.android.gms.gcm.GcmReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.example.gcm" />
</intent-filter>
</receiver>
-->
3. InstanceIDListenerService 업데이트
Token 업데이트 이벤트 등을 수신하고 업데이트를 처리하는 InstanceIDListener Service 변경
manifest 파일 선언 변경<!--
<service
android:name=".MyInstanceIDListenerService"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.gms.iid.InstanceID" />
</intent-filter>
</service>
-->
<service
android:name=".MyInstanceIDListenerService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
기존 InstanceIDListener Service 제거/**
public class MyInstanceIDListenerService extends InstanceIDListenerService {
...
@Override
public void onTokenRefresh() {
// Fetch updated Instance ID token and notify our app's server of any changes (if applicable).
Intent intent = new Intent(this, RegistrationIntentService.class);
startService(intent);
}
}
**/
다음 항목으로 변경합니다.
FirebaseInstanceIdService 상속
FirebaseInstanceId.getInstance().getToken();에서 설명한 대로 해당 매개변수의 값을 수정합니다.public class MyInstanceIDListenerService extends FirebaseInstanceIdService {
...
/**
* Called if InstanceID token is updated. This may occur if the security of
* the previous token had been compromised. Note that this is also called
* when the InstanceID token is initially generated, so this is where
* you retrieve the token.
*/
// [START refresh_token]
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
// TODO: Implement this method to send any registration to your app's servers.
sendRegistrationToServer(refreshedToken);
}
}
참고로 Firebase Instance Id.getInstance().getToken();ui 라인에서 읽어도 문제 없어요.
프로그램이 처음 시작될 때의 프로그램 #onCreate 같은 호칭을 사용하면null로 되돌아옵니다.
몇 초만 지나면 onTokenRefresh를 호출하여 비공id를 얻을 수 있습니다.
Token의 발행은 프로그램 라이브러리에서 자동으로 진행되며, onTokenRefresh를 읽을 수 있기 때문에 스스로 할 필요가 없다
예전에 썼던 밑에 코드는 필요 없어요. InstanceID instanceID = InstanceID.getInstance(this);
String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
// [END get_token]
Log.i(TAG, "GCM Registration Token: " + token);
4. GcmListenerService 교체(GCM 수신 등)
<!--
<service
android:name=".MyGcmListenerService"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</service>
-->
<service
android:name=".MyFcmListenerService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
FirebaseMessaging Service를 상속으로 변경
데이터도 getData의 Bundle이 아니라 맵에서 검색으로 변경/**
public class MyGcmListenerService extends GcmListenerService {
@Override
public void onMessageReceived(String from, Bundle data){
...
}
...
}
**/
public class MyFcmListenerService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage message){
String from = message.getFrom();
Map data = message.getData();
}
...
}
onMessageReceived가 평소처럼 알림 표시 처리를 하면...
단, 응용 프로그램은 background이기 때문에foreground의 행동이 다르기 때문에 좀 지루한 방법입니다. 자세한 상황은 다음에 하겠습니다!
각양각색의 자동화, 각양각색의 해소: D
공식 문서
https://developers.google.com/cloud-messaging/android/android-migrate-fcm
Reference
이 문제에 관하여([Android] 구글 클라우드 메시징(GCM)의 새 버전, Firebase Cloud Messaging(FCM)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/chikara_funabashi/items/6dbb6767a40157e184e7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
1. google-service.json을 얻을 수 있기 때문에 앱 모듈에 설정된 계층
부드럽게 설명하고 싶어요, 이렇게.
google-service.json은 만든 프로젝트의 정보만 쓴 당신의 파일입니다.그 응용 프로그램 전용 파일입니다.
프로젝트의 주요 모듈의 차원 구조에 위치한다.
2. 프로젝트(상층)의build.gradle 편집
classpath 'com.google.gms:google-services:3.0.0’
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
classpath 'com.android.tools.build:gradle-experimental:0.2.0'
// これを追加
classpath 'com.google.gms:google-services:3.0.0'
}
}
3. 응용 모듈의build.gradle 편집
다음 내용이 필요하지 않으니까 삭제하도록 하겠습니다.
com.google.android.gms:play-services-gcm:9.0.2
대신 다음과 같은 내용을 추가하다
com.google.firebase:firebase-messaging:9.0.2
com.google.firebase:firebase-messaging:9.0.2
맨 아래에 다음 내용을 추가합니다.
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.android.application'
android {
}
dependencies {
// これはいらなくなる
//compile 'com.google.android.gms:play-services-gcm:9.0.2'
compile 'com.google.firebase:firebase-core:9.0.2'
compile 'com.google.firebase:firebase-messaging:9.0.2'
// 今回は関係ないけど、Firebaseアナリティクスも試したい方はこれも入れる
compile 'com.google.firebase:firebase-analytics:9.0.2'
}
// 一番下に追加
apply plugin: 'com.google.gms.google-services'
컴파일이 통과되지 않을 때,classpath'com.google.gms: 구글 서비스: 3.0.00', 또는 구글 서비스.제이슨 같은 거 안 놓은 걸로 알고 있어요.코드 바꾸기
1. 권한 삭제
manifest 파일.FCM에서 필요하지 않으므로 제거<!--
<uses-permission android:name="android.permission.WAKE_LOCK" />
<permission android:name="<your-package-name>.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="<your-package-name>.permission.C2D_MESSAGE" />
-->
2. 레지스트리 항목 삭제
manifest 파일.등록표 항목은 더 이상 성명을 필요로 하지 않는다
fcm의 sdk는 자동으로 할 수 있을 것 같습니다.편리하다<!--
<receiver
android:name="com.google.android.gms.gcm.GcmReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.example.gcm" />
</intent-filter>
</receiver>
-->
3. InstanceIDListenerService 업데이트
Token 업데이트 이벤트 등을 수신하고 업데이트를 처리하는 InstanceIDListener Service 변경
manifest 파일 선언 변경<!--
<service
android:name=".MyInstanceIDListenerService"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.gms.iid.InstanceID" />
</intent-filter>
</service>
-->
<service
android:name=".MyInstanceIDListenerService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
기존 InstanceIDListener Service 제거/**
public class MyInstanceIDListenerService extends InstanceIDListenerService {
...
@Override
public void onTokenRefresh() {
// Fetch updated Instance ID token and notify our app's server of any changes (if applicable).
Intent intent = new Intent(this, RegistrationIntentService.class);
startService(intent);
}
}
**/
다음 항목으로 변경합니다.
FirebaseInstanceIdService 상속
FirebaseInstanceId.getInstance().getToken();에서 설명한 대로 해당 매개변수의 값을 수정합니다.public class MyInstanceIDListenerService extends FirebaseInstanceIdService {
...
/**
* Called if InstanceID token is updated. This may occur if the security of
* the previous token had been compromised. Note that this is also called
* when the InstanceID token is initially generated, so this is where
* you retrieve the token.
*/
// [START refresh_token]
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
// TODO: Implement this method to send any registration to your app's servers.
sendRegistrationToServer(refreshedToken);
}
}
참고로 Firebase Instance Id.getInstance().getToken();ui 라인에서 읽어도 문제 없어요.
프로그램이 처음 시작될 때의 프로그램 #onCreate 같은 호칭을 사용하면null로 되돌아옵니다.
몇 초만 지나면 onTokenRefresh를 호출하여 비공id를 얻을 수 있습니다.
Token의 발행은 프로그램 라이브러리에서 자동으로 진행되며, onTokenRefresh를 읽을 수 있기 때문에 스스로 할 필요가 없다
예전에 썼던 밑에 코드는 필요 없어요. InstanceID instanceID = InstanceID.getInstance(this);
String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
// [END get_token]
Log.i(TAG, "GCM Registration Token: " + token);
4. GcmListenerService 교체(GCM 수신 등)
<!--
<service
android:name=".MyGcmListenerService"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</service>
-->
<service
android:name=".MyFcmListenerService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
FirebaseMessaging Service를 상속으로 변경
데이터도 getData의 Bundle이 아니라 맵에서 검색으로 변경/**
public class MyGcmListenerService extends GcmListenerService {
@Override
public void onMessageReceived(String from, Bundle data){
...
}
...
}
**/
public class MyFcmListenerService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage message){
String from = message.getFrom();
Map data = message.getData();
}
...
}
onMessageReceived가 평소처럼 알림 표시 처리를 하면...
단, 응용 프로그램은 background이기 때문에foreground의 행동이 다르기 때문에 좀 지루한 방법입니다. 자세한 상황은 다음에 하겠습니다!
각양각색의 자동화, 각양각색의 해소: D
공식 문서
https://developers.google.com/cloud-messaging/android/android-migrate-fcm
Reference
이 문제에 관하여([Android] 구글 클라우드 메시징(GCM)의 새 버전, Firebase Cloud Messaging(FCM)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/chikara_funabashi/items/6dbb6767a40157e184e7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<!--
<uses-permission android:name="android.permission.WAKE_LOCK" />
<permission android:name="<your-package-name>.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="<your-package-name>.permission.C2D_MESSAGE" />
-->
<!--
<receiver
android:name="com.google.android.gms.gcm.GcmReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.example.gcm" />
</intent-filter>
</receiver>
-->
<!--
<service
android:name=".MyInstanceIDListenerService"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.gms.iid.InstanceID" />
</intent-filter>
</service>
-->
<service
android:name=".MyInstanceIDListenerService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
/**
public class MyInstanceIDListenerService extends InstanceIDListenerService {
...
@Override
public void onTokenRefresh() {
// Fetch updated Instance ID token and notify our app's server of any changes (if applicable).
Intent intent = new Intent(this, RegistrationIntentService.class);
startService(intent);
}
}
**/
public class MyInstanceIDListenerService extends FirebaseInstanceIdService {
...
/**
* Called if InstanceID token is updated. This may occur if the security of
* the previous token had been compromised. Note that this is also called
* when the InstanceID token is initially generated, so this is where
* you retrieve the token.
*/
// [START refresh_token]
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
// TODO: Implement this method to send any registration to your app's servers.
sendRegistrationToServer(refreshedToken);
}
}
InstanceID instanceID = InstanceID.getInstance(this);
String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
// [END get_token]
Log.i(TAG, "GCM Registration Token: " + token);
<!--
<service
android:name=".MyGcmListenerService"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</service>
-->
<service
android:name=".MyFcmListenerService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
/**
public class MyGcmListenerService extends GcmListenerService {
@Override
public void onMessageReceived(String from, Bundle data){
...
}
...
}
**/
public class MyFcmListenerService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage message){
String from = message.getFrom();
Map data = message.getData();
}
...
}
Reference
이 문제에 관하여([Android] 구글 클라우드 메시징(GCM)의 새 버전, Firebase Cloud Messaging(FCM)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/chikara_funabashi/items/6dbb6767a40157e184e7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)