我已经尝试了SO上提供的大多数解决方案。但是,无法解决这个问题。 问题:当FCM通知到达时,我正在启动将通知内容存储到sqlite中的服务。虽然它在应用程序打开时工作,但在应用程序关闭时它不起作用!!
这是我用来存储在sqlite中的服务类>。
public class NotiDataStoreService extends Service {
DatabaseHelper db;
String messageBody = "";
public Runnable mRunnable = null;
public NotiDataStoreService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public int onStartCommand(final Intent intent, int flags, int startId) {
final Handler mHandler = new Handler();
mRunnable = new Runnable() {
@Override
public void run() {
db = new DatabaseHelper(NotiDataStoreService.this);
messageBody = intent.getStringExtra("messageBody");
addNotification(messageBody);
SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("notification_details",Context.MODE_PRIVATE);
int noti_counter = sharedPref.getInt("count",0);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("count", ++noti_counter).apply();
}
};
mHandler.postDelayed(mRunnable, 1000);
return super.onStartCommand(intent, flags, startId);
}
public void addNotification(String messageBody){
File databaseFile = getDatabasePath(Constants.DATABASE_NAME);
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(databaseFile,"", null);
ContentValues values = new ContentValues();
values.put("notification", messageBody);
// Inserting Row
Log.i("hexa:", "notification inserting locally");
db.insert(Constants.TABLE_NOTIFICATIONS, null, values);
db.close();
}
}
任何帮助将不胜感激。 谢谢。。!:)
来自 FCM 文档。
要接收消息,请使用扩展FirebaseMessagingService
的服务。服务应覆盖onMessageReceived
和onDeletedMessages
回调。它应该处理收到后10 seconds
内的任何消息。之后,Android 不保证执行,并可能随时终止您的进程。如果您的应用需要更多时间来处理消息,请使用 Firebase 作业调度程序。
为大多数消息类型提供了onMessageReceived
,但以下情况除外:
Notification
app
在background
.在这种情况下,notification
将传递到 设备的system tray
.用户点击notification
打开应用 默认情况下为启动器。
Messages
同时具有notification
和data
有效载荷,两者background
和foreground
.在这种情况下,notification
是 传送到设备的system tray
,data
有效载荷为 在启动器活动的intent
extras
交付。
总结:
App state | Notification | Data | Both
----------------------------------------------------------------------------
Foreground | onMessageReceived | onMessageReceived | onMessageReceived
----------------------------------------------------------------------------
Background | System tray | onMessageReceived | Notification: system tray
Data: in extras of the intent.
溶液:
从上述指南来看,客户端应用似乎在foreground
和background
状态onMessageReceived()
收到data
消息。因此,如果要
同时处理foreground
和background
状态的消息,则应发送具有data
有效负载的推送消息。
这里有一个关于FCM的好教程(Notification
和Data payload
):
使用 Firebase Cloud Messaging FCM 和 PHP 的 Android 推送通知
希望这会有所帮助~