Cordova アプリを開発中に遭遇した FCM のエラーについて。
ちょっとしたトラブルで、一度プラットフォームを削除し、cordova-plugin-fcm を再インストールしたところ、Android Studio でアプリを起動した際にエラーが発生しました。
なんでも、FirebaseInstanceIdService が廃止予定で、使用が非推奨になったためでした。
今回の修正で参考にさせていただいた記事はこちらから。
FirebaseInstanceIdServiceがDeprecatedになった件 – Qiita
https://qiita.com/keijumt/items/d45ea0da3dfa6284ad90
対処法としては、まず非推奨の FirebaseInstanceIdService を FirebaseMessagingService に置き換えます。
私の環境では、別のクラスに extends で継承されていたため、こちらを下記のように書き換えました。
public class MyFirebaseInstanceIDService extends FirebaseMessagingService { ... }
次に、MyFirebaseInstanceIDService クラス内で、onTokenRefresh()
をオーバーライドしていたのですが、FirebaseMessagingService では、この関数のかわりに onNewToken()
が用意されているので、こちらも変更します。
public class MyFirebaseInstanceIDService extends FirebaseMessagingService { @Override public void onNewToken(String old_token) { ... } }
さらに、onNewToken()(旧 onTokenRefresh())内では、FirebaseInstanceId.getInstance().getToken()
が使われていましたが、こちらも非推奨らしく、コードに打ち消し線が引かれてしまったため、併せて修正します。
と言っても、引数を追加して、try/catch で囲むだけなんですけどね。
修正後のコードは下記のとおりです。
String sender_id = [FCM の送信者ID(数字12桁)]; String refreshedToken = null; try { refreshedToken = FirebaseInstanceId.getInstance().getToken(sender_id, "FCM"); } catch (IOException e) { e.printStackTrace(); }
修正は以上で完了です。
あとは、通常通り Build → Run を実行したところ、エラーも発生せず、問題なく起動できました。
ただ、その時は起動確認だけを行っただけなので、FCM の機能については、これから入念にチェックしたいと思います。
以上、FCM の FirebaseInstanceIdService がエラーになったときの対処法でした。
導入したプラグイン等については、定期的に関数の廃止などをした方が良さそうですね。