有没有一种简单的方法可以在没有显式迭代的情况下将Map转换为bundle中的Bundle?
为什么?
Firebase会返回通知地图getData().我需要将数据传递给intent.以前GCM给了我一个包,所以我不需要担心这个.
最近我问了一个关于使用GCM 发送推送通知的问题:向Android发送推送通知.现在有了FCM,我想知道它与服务器端开发有多么不同.明智的编码,它们是一样的吗?在哪里可以找到显示从服务器向Android设备发送推送通知的示例FCM代码?
我是否需要下载任何JAR库以使用Java代码向FCM发送通知?向Android发送推送通知中的示例代码显示使用GCM发送推送通知,并且需要服务器端GCM JAR文件.
但是,另一个例子在https://www.quora.com/How-do-I-make-a-post-request-to-a-GCM-server-in-Java-to-push-a-notification-to -the-client-app显示使用GCM发送推送通知,并且不需要服务器端GCM JAR文件,因为它只是通过HTTP连接发送.FCM可以使用相同的代码吗?使用的网址是" https://android.googleapis.com/gcm/send ".什么是FCM的等效URL?
提前致谢.
我已将项目从使用GCM迁移到使用Firebase.当设备处于唤醒状态或最近处于睡眠状态时,推送通知会通过确认,但如果我离开设备一小时,则在我唤醒设备之前不会发送推送.
Android文档说,如果您需要唤醒设备以传递消息,请使用优先级设置为高的FireBase.它还说设备管理应用程序不受Doze限制,我的应用程序是一个设备管理应用程序.
我想我会提到当我将项目从GCM迁移到FCM时,我只在firebase控制台中指定了包名,而不是指纹.
我试过了什么
将优先级设置为高
{
"time_to_live": 300000,
"delay_while_idle": false,
"android": {
"priority": "high"
},
"data": {
"message": "PING_DEVICE",
"time": "21/01/2018 16:20:28",
"pushguid": "10062"
},
"registration_ids": [
"eOMT........"
]
}
Run Code Online (Sandbox Code Playgroud)
设定生存时间,以便最终传达信息.delay_while_idle设置为false,2016年9月后FCM将忽略此值.
设备管理员应用程序不受Doze的影响,我的设备管理员应用程序,但我还明确将应用程序添加到设置 - >电池 - >优化中的Doze白名单中.这是通过设置应用程序手动完成的,而不是以编程方式在代码中完成
我已经离开我的设备睡了3个小时,没有推动通过.我还使用adb将设备置于Doze中.当adb将设备置于Doze中时,没有收到推送,当adb将设备从Doze中取出时,推送就会通过.
进一步的想法我没试过.
我的推动是数据消息.这是因为我不希望推送到设备上的通知栏并让用户单击它来执行功能.用户没有与设备管理应用程序的交互.因此,数据消息由处理
onMessageReceived(RemoteMessage remoteMessage)
Run Code Online (Sandbox Code Playgroud)
我相信通知消息会唤醒设备,这是我需要的,但我希望应用程序处理推送,而不是用户.我可以拥有通知和数据但是onMessageRecievied处理功能的消息吗?
有没有人经历过类似的事情或有任何解决方案?
[编辑1]我在下面找到了以下链接,说明您可以发送通知和数据的消息,但如果应用程序在后台,则会显示通知,但只有在用户单击通知时才会执行数据.这不是我想要的,因为我希望数据立即在onMessageRecived中执行.
[EDIT2]我已向应用添加了以下代码和权限.该应用程序现在要求用户将应用程序列入白名单,因此我单击是.然后我通过adb将设备放入Doze并发送推送.在我将设备退出打盹模式之前,没有任何事情发生.所以,不幸的是,这不起作用.
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Intent intent = new Intent();
String packageName = getPackageName();
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
if (!pm.isIgnoringBatteryOptimizations(packageName)) {
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
startActivity(intent);
}
}
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
Run Code Online (Sandbox Code Playgroud)
[EDIT3]
我已经做了进一步的测试,试图找出问题并将我的Web应用程序代码排除在外.我通过adb和使用过的FireBase控制台将设备置于Doze中以发送推送.推送正确 …
我希望在收到通知时自动打开应用程序,Firebase和新的FCM通知是否可以实现?
我知道我可以设置click_action,但这只是为了自定义通知点击会启动哪些活动,我需要在收到通知时自动启动的内容.
我尝试了快速启动消息传递firebase示例,并且有一个onMessageReceived()方法,但只有在应用程序位于前台时它才有效.应用程序在后台运行时是否会执行某些操作?GCM可以通过直接启动广播接收器的活动意图来做我喜欢的事情,广播接收器在收到通知时调用.
android firebase firebase-cloud-messaging firebase-notifications
未使用Android清单的默认FCM图标.而是使用Android标准图标.在logcat中它说:
E/FirebaseMessaging:ID为2131230849的图标使用无效渐变.使用后备图标.
默认图标仅包含一种颜色.我用多个不同的图标测试了它,但总是使用Android标准图标.
在这里,我在Kotlin中使用了FirebaseMessagingService,但是当我运行该项目时,它会给我以下错误:
类'MyFirebaseMessagingService'不是抽象的,也不实现抽象基类成员public abstract fun zzd(p0:Intent!):com.google.firebase.messaging.FirebaseMessagingService中定义的单元
有帮助吗?
我正在使用Firebase Cloud Messaging发送推送通知.
这是我的FirebaseMessageService:
public class FireBaseMessageService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.e("TAG", "From: " + remoteMessage.getFrom());
Log.e("TAG", "Notification Message Body: " + remoteMessage.getData().get("CardName")+" : "+remoteMessage.getData().get("CardCode"));
sendNotification(remoteMessage.getNotification().getBody());
}
private void sendNotification(String messageBody) {
Intent intent = new Intent(this, StartActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher_final)
.setContentTitle("Notification")
.setContentText(messageBody)
.setTicker("Test")
.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_SOUND)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 /* ID …Run Code Online (Sandbox Code Playgroud) service android push-notification android-notifications firebase-cloud-messaging
我正在尝试使用Firebase消息传递(Web).Firebase默认搜索保存服务工作者的文件"firebase-messaging-sw.js".
服务工作者脚本应该位于应用程序的绝对路径上!例如:http://localhost/firebase-messaging-sw.js
如何更改此默认位置?!搜索官方文档我发现这个方法:useServiceWorker接受服务工作者注册,但尝试使用它我得到一个错误,该方法甚至不存在!
那么,如何更改服务工作者的位置以进行firebase消息传递?
//身体就像这样
{
"to":
"/topics/NEWS"
,
"data":{
"extra_information": "This is some extra information"
},
Run Code Online (Sandbox Code Playgroud)
//我需要提供的通知
"notification":{
"title": "ChitChat Group",
"text": "You may have new messages",
"click_action":"ChatActivity"
}
}
Run Code Online (Sandbox Code Playgroud) 我已经检查了我的app build.gradle文件,这些是与firebase相关的唯一行
/***
* Firebase
*/
implementation 'com.google.firebase:firebase-core:15.0.0'
implementation 'com.google.firebase:firebase-messaging:15.0.0'
implementation('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
transitive = true
}
implementation 'com.google.firebase:firebase-ads:15.0.0'
Run Code Online (Sandbox Code Playgroud)
我没有任何使用firebase的库,所以我认为使用旧版本的库不会出现问题.
问题是我不能使用新的v15版本的firebase构建gradle,clean项目或重建项目,因为它不断抛出错误 All firebase libraries must be either above or below 14.0.0
android firebase firebase-cloud-messaging firebase-analytics firebase-crash-reporting
firebase ×8
android ×7
bundle ×1
device-admin ×1
javascript ×1
kotlin ×1
postman ×1
service ×1