我有一个关于接收带有通知和数据有效负载的Firebase消息的问题。 documentation表示数据将在意图的附加内容中到达"。
我的问题是哪个意图(或活动)?当将应用程序切换到后台时,将有一个用户停止的屏幕。那么,我是否需要尝试在我的应用中检索Extra for all Intents / Activities?
一旦应用程序到达前台,我在何处以及如何实际编码以检索数据有效负载?
谢谢!
增加:
我的意思是,我有10个以上的活动,当应用程序完成时会有更多活动。那么,我是否必须检索所有活动的Extra以查看是否已使用任何Push数据有效负载重新打开该应用程序?
答案 0 :(得分:2)
在您在问题中链接的文档中,它指出:
包含通知和数据有效负载的消息,包括背景和 前景。在这种情况下,通知将传递给 设备的系统托盘,数据有效负载在附加功能中提供 您的启动器活动
的意图
使用类别LAUNCHER在清单中指定启动器活动。例如:
<activity
android:name="com.example.MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
您可以覆盖默认行为以指定其他活动。在message notification data中,使用操作字符串的值添加属性click_action
。然后创建活动并在清单中为其提供与该操作匹配的intent过滤器。例如,使用消息:
{
"to": "dhVgCGVkTSR:APA91b...mWsm3t3tl814l",
"notification": {
"title": "New FCM Message",
"body": "Hello World!",
"click_action": "com.example.FCM_NOTIFICATION"
},
"data": {
"score": "123"
}
}
像这样定义意图过滤器:
<activity android:name=".MyFcmNotificationActivity">
<intent-filter>
<action android:name="com.example.FCM_NOTIFICATION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
为了澄清文档,在收到消息时,数据有效负载不会传递给活动;它是在用户点击通知时发送的。
答案 1 :(得分:0)
您必须扩展onMessageReceived
类。
并覆盖@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// ...
// TODO(developer): Handle FCM messages here.
Log.d(TAG, "From: " + remoteMessage.getFrom());
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
if (/* Check if data needs to be processed by long running job */ true) {
// For long-running tasks (10 seconds or more) use Firebase Job Dispatcher.
scheduleJob();
} else {
// Handle message within 10 seconds
handleNow();
}
}
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
// Also if you intend on generating your own notifications as a result of a received FCM
// message, here is where that should be initiated. See sendNotification
method below.
}
方法。
public System.Data.DataTable ReadExcel(string fileName, string fileExt, strig SheetName)
{
string conn = string.Empty;
System.Data.DataTable dtexcel = new System.Data.DataTable();
if (fileExt.CompareTo(".xls") == 0)
conn = @"provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties='Excel 8.0;HRD=Yes;IMEX=1';"; //for below excel 2007
else
conn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties='Excel 12.0;HDR=YES';"; //for above excel 2007
using (OleDbConnection con = new OleDbConnection(conn))
{
try
{
String Query = String.Format("select * from [{0}]",SheetName);
// [sheet1] = [YouerSheetNameinExcelFile]
//OleDbDataAdapter oleAdpt = new OleDbDataAdapter("select * from [sheet1]", con); //here we read data from sheet1
OleDbDataAdapter oleAdpt = new OleDbDataAdapter(Query, con); //here we read data from sheet1 and from specific cell range.
oleAdpt.Fill(dtexcel); //fill excel data into dataTable
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
}
return dtexcel;
}
确保在清单中注册服务。