質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

2798閲覧

AndroidStudio バックグラウンド状態でPush通知が来た時に入るイベントの有無

ludolf

総合スコア39

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2020/05/13 07:45

編集2020/05/22 04:04

いつもお世話になっております。

早速ですが、Push通知で送られてきた通知をSQlite(Room)で保存する仕組みを作っているのですが、バックグラウンド時にPush通知が来たら発火するイベント等はありますでしょうか?
フォアグランドの状態で通知が来ると「onMessageReceived」が発火するので、その中にインサート処理を書いて対応できていますが、バックグランド状態で発火するイベントが見つけれず困っております、、

公式サイトでは「システムトレイ」と一文だけ書いており、詳しく書いておりません。
バックグランド状態で発火するイベントはそもそも存在しますでしょうか。

↓公式サイト↓
https://firebase.google.com/docs/cloud-messaging/android/receive?hl=ja

(それと良ければ前回投稿した質問に回答が得られていないのでご教授頂ければ幸いです、、)
前回の質問:https://teratail.com/questions/256826

ご回答よろしくお願いいたします。

下記コードはonMessageReceivedが書いてあるファイルです。
※細かいところは省略しています。
MyFirebaseMessagingService.java

Java

1public class MyFirebaseMessagingService extends FirebaseMessagingService { 2 3 private static final String TAG = "MyFirebaseMsgService"; 4 5 @Override 6 public void onNewToken(String token) { 7 …省略 8 } 9 10 @Override 11 public void onMessageReceived(RemoteMessage remoteMessage) { 12 13 Log.d(TAG,"プッシュ通知が来た"); 14 15 if (remoteMessage != null) { 16 // 通知メッセージ 17 RemoteMessage.Notification notification = remoteMessage.getNotification(); 18 19 if (notification != null) { 20 // 通知メッセージを処理 21 Log.d(TAG,notification.getTitle()); 22 Log.d(TAG,notification.getBody()); 23 Log.d(TAG,notification.getClickAction()); 24 25 String imageUrl; 26 27 if(notification.getImageUrl() != null){ 28 Log.d(TAG,notification.getImageUrl().toString()); 29 imageUrl = notification.getImageUrl().toString(); 30 }else{ 31 Log.d(TAG,"なにも入っていません"); 32 imageUrl = ""; 33 } 34 35 //プッシュ通知をデータベースに入れ込み 36 PushList pushList = new PushList(); 37 PushListInsertAsync pushListInsertAsync = new PushListInsertAsync(notification.getTitle(),notification.getBody(),dateTime,notification.getClickAction(),1,0,imageUrl,getApplicationContext(),pushList); 38 pushListInsertAsync.execute(); 39 40 } 41 42 //フォアグランド用にタイトル・本文・チャンネルを作成 43 String title = notification.getTitle(); 44 String body = notification.getBody(); 45 String channel = notification.getChannelId(); 46 47 //Push通知表示用メソッド呼び出し 48 sendNotification(title,body,channel); 49 50 } 51 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/05/13 10:21

単なる通知メッセージに関しては、バックグラウンド状態の場合アプリのコードは呼ばれないということです。データペイロードを含んでいれば onMessageReceived が呼ばれるのでは。
ludolf

2020/05/14 05:38

こんにちわ! データペイロードを付与して送信してみましたが、「onMessageReceived」には入っていないみたいです。 ですがPush通知を送信してトレイに入った時にログが反応しました。 下記です。 D/ApplicationPackageManager: queryIntentActivitiesAsUser size results:1, for package:パッケージ名 D/FA: Logging event (FE): notification_receive(_nr), Bundle[{ga_event_origin(_o)=fcm, topic(_nt)=/topics/Android, message_type(_nmc)=display}] 送信はnodeでやっていて下記が構文です。 node.js var topic = 'Android'; // var topic = 'iOS'; var message = { notification: { title: '送信テスト', body: '送信テスト送信テスト', }, data : { body : "送信テスト送信テスト", title : "送信テスト", url : "https://firebase.google.com/" }, topic: topic };
退会済みユーザー

退会済みユーザー

2020/05/21 11:55

onMessageReceived が呼ばれていないのはどうやって確認しましたか?
ludolf

2020/05/22 04:07

ご質問ありがとうございます! onMessageReceivedに入ったらログを出力しております。 フォアグラウンド時に来た場合は「プッシュ通知が来た」と通知されておりますが、バックグラウンド時は通知されておりません。 念のためプログラム追記しました、よろしくお願いします!
退会済みユーザー

退会済みユーザー

2020/05/22 10:04

試しにデータペイロードだけにするとどうでしょうか?
ludolf

2020/05/25 00:43

yukke様データペイロードのみで送信するとできましたー! 大変助かりました! ただし疑問なのですが、公式サイトで紹介されている色々な関数がありますがデータペイロードのみで送信する方法以外でバックグラウンドに送信するやり方はないのでしょうか。 当方そもそもたくさんの関数が公式で用意されていますが、活用法?と言っていいのか分かりませんが、この時はこの関数を使うのが普通など、その普通を理解していないのが現状です、、 とりあえず参考サイトに載っているものをコピーして送信ができたので「notification」を使っているのですが、どういった機能なのか合わせてご教授頂ければ幸いです、、 https://firebase.google.com/docs/reference/admin/node/admin.messaging?hl=ja
退会済みユーザー

退会済みユーザー

2020/05/25 09:23

https://firebase.google.com/docs/cloud-messaging/android/receive?hl=ja notificationのみか、notificationとデータペイロード両方だと、バックグラウンドのときにアプリの方で通知が取れないので、データペイロードで送るのが無難かと思います。 notificationは通知のタイトルや本文、データペイロードは任意のデータを送りたいときに使います。 が、別にデータペイロードで通知内容を送ったからって問題はないので、アプリで通知を制御したいならデータペイロードだけで送ってしまって大丈夫だと思います。
ludolf

2020/05/26 00:56

>notificationは通知のタイトルや本文、データペイロードは任意のデータを送りたいときに使います。が、別にデータペイロードで通知内容を送ったからって問題はないので、アプリで通知を制御したいならデータペイロードだけで送ってしまって大丈夫だと思います。 なるほどでしたら、今後はすべてデータペイロードに統一して送ったとしても特に問題はないとのことですね。 追加でお答えいただきありがとうございます!
guest

回答1

0

自己解決

本件はデータペイロードのみの記述にすると送信することができました。
ご協力いただいた皆様大変助かりました。

node

1/*************************************** 2* 全員通知 3**************************************/ 4function send_push_notice_all(admin) { 5 return new Promise((resolve,reject) => { 6 var topic = 'All_User'; 7 // var topic = 'Android'; 8 // var topic = 'iOS'; 9 10 var message = { 11 data : { 12 message : "本文", 13 title : "タイトル", 14 }, 15 topic: topic 16 }; 17 18 // Send a message to devices subscribed to the provided topic. 19 admin.messaging().send(message) 20 .then((response) => { 21 // Response is a message ID string. 22 console.log('Successfully sent message:', response); 23 resolve(true); 24 }) 25 .catch((error) => { 26 console.log('Error sending message:', error); 27 reject(error); 28 }); 29 }); 30}

投稿2020/05/26 01:00

ludolf

総合スコア39

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問