react-native-firebaseはreact-nativeアプリにFirebaseを簡単に組み込むことができるライブラリです。 中でもよく利用するのがプッシュ通知で、基本はガイド通りに進めていけば問題なく動作しますが、Androidの特定バージョン以降ではプッシュ通知のポップアップが表示されません。 今回は上記のケースの対処法をご紹介します。
react-native-firebase
のv6
系(記事中では下記モジュールを使用)
"@react-native-firebase/app": "8.3.1"
"@react-native-firebase/messaging": "7.7.2
react-native
は0.6
系以上(記事中は0.63.1
)react-native-firebase
でプッシュ通知が届く状態(トークンの取得やら、受信のイベントハンドラの設置やらが完了)にしても、Android 8
以降の端末ではプッシュ通知のポップアップが表示されず、サイレントで通知が届くと思います。
これには、まずAndroid
のプッシュ通知の仕様を知る必要があります。
Android 8
だとサイレント通知になる?Android 8(Oreo)
から通知チャンネルという機能が追加されました。
これ以降、プッシュ通知で音やポップアップを表示する場合は通知チャンネル(カテゴリと読み替えてもいいかもしれません)を明示的に指定しなければなりません。
react-native-firebase/messaging
を一通り組み込んだ段階では、この通知チャンネルの指定が出来ていない状態のため、Android 8
以降ではサイレント通知となります。
v5
系まではソース上で指定ができたこの通知チャンネルの指定ですが、v5
系まではnotifications()
というモジュール以下で指定ができました。
しかし、v6
系では廃止されたらしく、指定には少し工夫が必要です。
v6
系で通知チャンネルを指定する方法MainActivity
の修正指定はAndroid
のネイティブコードの中で行います。
対象はMainActivity.java
でandroid/app/src/main/java/com/{appName}
にあります。
下記のようにソースを変更します。
package hogehoge;
import android.os.Bundle;
import android.os.Build; // 追加
import android.app.NotificationChannel; // 追加
import android.app.NotificationManager; // 追加
import com.facebook.react.ReactActivity;
public class MainActivity extends ReactActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// チャンネル作成処理を実行
createNotificationChannel();
}
/**
* Returns the name of the main component registered from JavaScript. This is used to schedule
* rendering of the component.
*/
@Override
protected String getMainComponentName() {
return "appname";
}
/**
* 通知チャンネルの作成
*/
private void createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// 通知ID
String id = "notification";
// チャンネル名
CharSequence name = "お知らせ";
// チャンネル説明
String description = "アプリからのお知らせ情報を通知します。";
// 重要度
int importance = NotificationManager.IMPORTANCE_HIGH;
//チャンネルインスタンスを作成
NotificationChannel channel = new NotificationChannel(id, name, importance);
// 説明を設定
channel.setDescription(description);
// チャンネルマネージャインスタンスを作成しチャンネルをセット
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
}
}
firebase.json
の作成さらにデフォルトの通知チャンネルを指定するためfirebase.json
に記載を追加します。
未作成の場合は作成しましょう。
touch firebse.json
{
"react-native": {
"messaging_android_notification_channel_id": "notification"
}
}
今回は、react-native-firebase
のプッシュ通知をAndroid 8
以降のバージョンで通知ポップアップを表示させるため、通知チャンネルを設定する方法をご紹介しました。
通知の設定周りについてはiOS
の方が面倒な印象がありますが、Android
もOS
のバージョンによって対応が異なるため、それなりに手間がかかりますね。
react-native
の学習には、大元であるreact
の知識もさることながら、iOS
やAndroid
といったネイティブの知識も必要になってきます。
いずれかのバックボーンを元々持っている人にとっては取り掛かりやすいかもしれませんが、Javascript
をようやく覚えて「さあスマホアプリを作ろう!」と思い立った方にはなかなか高いハードルです。
そういった場合、書籍や動画といった体系的にまとめられた教材を使用するのが有効です。
ひととおりの基本知識を蓄えてから各種ライブラリやredux
といったフレームワークを利用することになるため、何は無くとも基礎固めをしていきましょう。
以下に管理人が実際に学習した教材を紹介します。
特に初心者〜中級者にオススメの書籍です。
ReactNative
の体系的な知識をぎゅっと詰め込んだ一冊となっており、
お題目に沿って進めていくことでTODOアプリ
を開発することができます。
※ページ量が嵩むため、Kindle
版の購入をオススメします。