[Firebase Notifications] 백그라운드에도 PUSH 알림을 표시하는 방법을 적용합니다.
10087 단어 AndroidFirebase추식 통지Notification
onMessageReceived()가 호출되지 않은 문제
FireBase 콘솔의 Notifications에서 메시지를 보낼 때 응용 프로그램이 백그라운드인 경우 계승 FirebaseMessagingService 클래스 onMessageReceived() 를 호출하지 않고 상태 표시줄에 자동으로 알림을 표시합니다.
이 사양은 FCM문서에도 기재되어 있습니다.
응용 프로그램이 백그라운드에서 실행될 때 Android는 시스템 트레이에 알림 메시지를 보냅니다.사용자가 알림을 누르면 기본적으로 프로그램 이니시에이터가 열립니다.
여기에는 알림과 데이터의 유효한 하중을 동시에 포함하는 메시지(공지 콘솔에서 보내는 모든 메시지)가 포함되어 있습니다.알림은 터미널의 알림 영역(시스템 트레이)에 분배되고 데이터의 유효 하중은 이니시에이터 활동의 임시 추가 부분에 분배됩니다.
그럼에도 불구하고 응용 프로그램이 프론트 데스크톱이 아니더라도 플래카드 모양의 PUSH 알림이 표시됩니다.
백그라운드에서도 PUSH 알림 방법 표시
실제로 프로그램이 백그라운드에 있는 상태에서도 계승된 클래스FirebaseMessagingService가 호출된다.
다만, 도착하지 않았다onMessageReceived().
onMessageReceived() 이전에 호출된 것은
handleIntent(Intent intent)
.매개변수의
intent
에는 PUSH 알림 메시지가 저장됩니다.참고로 프로그램이 프론트 데스크톱이라도 호출할 수 있다
handleIntent()
.FireBase Console에서 메시지를 만들 때 사용자 정의 데이터를 다음과 같이 설정합니다.
디버그 모드에서 Intent 를 보려면 다음과 같이 하십시오.
Bundle[{google.c.a.udt=0, google.sent_time=1510755428922, gcm.notification.e=1, google.c.a.c_id=xxxxxxxxxx, google.c.a.ts=xxxxxxxx, gcm.notification.sound=default, gcm.n.e=1, url=https://xxxx/yyyyy/zzzz, body=ボディ, from=xxxxxxxxx, gcm.notification.sound2=default, title=タイトル, google.message_id=0:xxxxxxxxxxxxx, gcm.notification.body=android---, google.c.a.e=1, collapse_key=jp.co.xxxxxxxxxx}]
body
, title
, url
에 FireBase 콘솔에서 메시지를 만들 때 설정한 사용자 정의 데이터가 추가되었습니다.그런 다음 값을 가져와서 PUSH 알림을 일반적으로 표시합니다.
전체적인 실현은 이렇다.
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void handleIntent(Intent intent) {
if (intent.getExtras() == null) return;
Map<String, String> data = new HashMap<>();
data.put("body", intent.getExtras().getString("body"));
data.put("title", intent.getExtras().getString("title"));
data.put("url", intent.getExtras().getString("url"));
sendNotification(data);
}
private void sendNotification(Map<String, String> data) {
String title = data.get("title");
String message = data.get("body");
String url = data.get("url");
Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
PendingIntent.FLAG_ONE_SHOT);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setContentTitle(title)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentText(message)
.setAutoCancel(true)
.setPriority(1 /* Notification.PRIORITY_HIGH */)
.setFullScreenIntent(null, true)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
}
끝내다
이게 정확한 방법인지는 모르겠지만 기본적으로 문제가 없어요.
다른 좋은 방법이 있으면 알려주세요!
Reference
이 문제에 관하여([Firebase Notifications] 백그라운드에도 PUSH 알림을 표시하는 방법을 적용합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/oya-t/items/4c757828d10fccf0bcbb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)