Firebase Cloud Messaging(FCM)のPUSH通知をトリガーに、スリープ状態から復帰する

公開日:2018-10-14
最終更新:2018-10-24
※この記事は外部サイト(http://hikouki.hateblo.jp/entry/2018/10/11...)からのクロス投稿です

Androidの場合、スリープ状態でPUSH通知を受けると、音だけ再生されて画面は真っ暗。

それだと気づけないので、LINEとかのPUSH通知とかは、PowerManagerで電源をONにした後にPUSH通知を作って表示したりしてます。

FCMで普通にやるとPUSH通知の受信から制御できないので、

どうやったらできるようになるのか、FCMの通知の仕組みから見ていきます。

FCMには通知が2種類存在します。

参照:[https://firebase.google.com/docs/cloud-messaging/concept-options?hl=ja#notifications_and_data_messages:title]

通知 通知の表示 通知の受信を制御 通知のタップを制御
通知メッセージ Auto X
データメッセージ Manual

凄くざっくりした感じですが、簡単に通知を表示するなら「通知メッセージ」を使って、

通知の受信をハンドリングしたり、通知の表示をカスタマイズしたい場合は「データメッセージ」を使います。

今回は、受信をハンドリングして電源をONにしたいので、「通知メッセージ」ではなく「データメッセージ」を利用します。

2種類の通知はAPIを叩く際に渡すJSONの構造によって決まります。

通知メッセージの場合は、 notification に通知内容を設定します。(dataも設定可能です)

{
  "to" : "axd2Wedbd2Wed2WBed9ebVeewdbd2WedbWq1",
  "notification" : {
    "body" : "hello",
    "title" : "greeting"
  },
  "data": {
    sound: 'ping'
  }
}

データメッセージの場合は data のみに通知内容を設定します。

{
  "to" : "axd2Wedbd2Wed2WBed9ebVeewdbd2WedbWq1",
  "data" : {
    "body" : "hello",
    "title" : "greeting"
  }
}

今回は、データメッセージを使いたいので、dataのみに値を設定してFCMのAPIを叩いてPUSH通知を送信します。

ここまでで、サーバー側の仕事は完了です。

後は、アプリ側でデータメッセージを受けて処理するだけです。

仕事上、最近、ReactNativeを使う機会が多いので、RNのコード例です。

import { AppRegistry } from "react-native";
import Wakeful from "react-native-wakeful";
import App from "./App";

AppRegistry.registerComponent("app", () => App);

AppRegistry.registerHeadlessTask(
  "RNFirebaseBackgroundMessage",
  () => async message => {
    Wakeful.acquire(); // 電源をON
    return Promise.resolve();
  }
);

PUSH通知を作る所までコード例を書いてないですが、RNでPUSH通知を作るか、

AppRegistry.registerHeadlessTask せずに、Android側でRNFirebaseMessagingServiceを継承して、

onMessageReceivedでPowerManagerで電源入れて、PUSH通知つくることまでやっちゃっても良い気がします。

記事が少しでもいいなと思ったらクラップを送ってみよう!
18
+1
@hikouki'の技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする