Articles of firebase cloud messaging

当应用在后台或未运行时,推送通知无法正常工作

我正在使用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, […]

所有firebase库必须高于或低于14.0.0

我检查了我的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’ 我没有任何使用firebase的库,因此我认为使用旧版本的库不会出现问题。 问题是我无法使用新的v15版本的firebase构建gradle,clean项目或重建项目,因为它不断抛出错误All firebase libraries must be either above or below 14.0.0

收到firebase通知的打开应用程序(FCM)

我希望在收到通知时自动打开应用程序,Firebase和新的FCM通知是否可以实现? 我知道我可以设置click_action,但这只是为了自定义哪个活动将在通知点击时启动,我需要一些在收到通知时自动启动的东西。 我尝试了快速启动消息传递firebase示例,并且有一个onMessageReceived()方法,但它仅在应用程序位于前台时才有效。 应用程序在后台运行时是否会执行某些操作? GCM可以通过直接启动广播接收器的活动意图来做我喜欢的事情,广播接收器在收到通知时调用。

Firebase云消息传递 – 处理注销

当用户退出我的应用程序并且我不再希望他接收设备通知时,我该如何处理这种情况。 我试过了 FirebaseInstanceId.getInstance().deleteToken(FirebaseInstanceId.getInstance().getId(), FirebaseMessaging.INSTANCE_ID_SCOPE) 但我仍然收到设备的registration_id通知。 我还确保这是我应删除的令牌: FirebaseInstanceId.getInstance().getToken(FirebaseInstanceId.getInstance().getId(), FirebaseMessaging.INSTANCE_ID_SCOPE) 或者只是FirebaseInstanceId.getInstance().getToken() )。 我也尝试过FirebaseInstanceId.getInstance().deleteInstanceId() ,但是下次我调用FirebaseInstanceId.getInstance.getToken我收到null(它在第二次尝试时有效)。 我想,在deleteInstanceId之后,我可以立即再次调用deleteInstanceId getToken() ,但它看起来像是一个黑客。 并且还有这个答案表明不应该这样做,但它建议删除显然不起作用的令牌。 那么处理这个问题的正确方法是什么?

Android:Firebase令牌在首次运行时为空

我正在使用FCM在我的应用中提供通知。 一切都运作良好,但现在我意识到,当我使用Android Studio(而非GooglePlay)安装我的应用程序时,首次运行时令牌为空。 当我关闭我的应用程序并重新启动它时,令牌不再为空。 导致这个问题的原因是什么,我该如何避免呢? InstanceIDService: public class InstanceIDService extends FirebaseInstanceIdService { @Override public void onTokenRefresh() { String token = FirebaseInstanceId.getInstance().getToken(); registerToken(token); } private void registerToken(String token) { OkHttpClient client = new OkHttpClient(); RequestBody body = new FormBody.Builder() .add(“Token”,token) .build(); Request request = new Request.Builder() .url(“url_to_registration_script”) .post(body) .build(); try { client.newCall(request).execute(); } catch (IOException e) […]

Firebase(FCM):打开活动并通过点击通知数据。 安卓

应该明确实施如何使用Firebase通知和数据。 我读了很多答案,但似乎无法使其发挥作用。 这是我的步骤: 1.)我在PHP中将通知和数据传递给android,它看起来很好: $msg = array ( “body” => $body, “title” => $title, “sound” => “mySound” ); $data = array ( “user_id” => $res_id, “date” => $date, “hal_id” => $hal_id, “M_view” => $M_view ); $fields = array ( ‘registration_ids’ => $registrationIds, ‘notification’ => $msg, ‘data’ => $data ); $headers = array ( ‘Authorization: key=’.API_ACCESS_KEY, […]

GCM的API密钥突然无效? 未经授权(401)错误

我为我的Android应用程序创建了一个用于GCM推送通知的Android API密钥。从过去两天开始,GCM服务器在PHP中返回Unauthorized(401)响应。 Android API密钥是否有任何原因无效/过期? 或者GCM是否弃用了Android API密钥? 我还没有得到关于为什么Android API密钥无效的正确解释? 他们中的大多数人更喜欢使用服务器密钥而不是GCM的Android API密钥,但没有提到为什么不使用Android API密钥。 为什么不在GCM中使用Android API Key? Android API密钥有任何限制吗? 或者,如果通知消息超过每日限制,GCM服务器是否会阻止通知/ GCM服务器使Android API密钥无效?

Firebase云消息传递最后没有收到collapse_key(速率有限?)

我有一项服务,使用Firebase云消息传递使用带有collapse_key参数集的FCM数据消息与其Android客户端进行通信。 从有关可折叠键的文档: 当有较新的消息呈现较旧的线程时,相关消息与客户端应用程序无关,FCM将替换旧消息。 例如,发送到同步或过时的通知消息。 这就是我要找的东西。 我不需要所有更新,只需要最后一个。 但是,如果用户在线 ,我需要尽快 。 但是,我得到一个奇怪的速率限制,不会导致任何HTTP错误代码。 它很容易重现,只需要连续20条数据消息并监控android FirebaseMessagingService.onMessageReceived : for i in {1..20}; do curl -v -X POST –header “Authorization: key=$SERVER_KEY” \ –Header “Content-Type: application/json” \ https://fcm.googleapis.com/fcm/send \ -d “{\”to\”:\”$CLIENT_TOKEN\”, \ \”data\”:{\”counter\”:\”$i\”}, \ \”priority\”:\”high\”, \ \”collapse_key\”: \”test\” \ }” done 上面的bash脚本有点难以阅读,但我有一个我感兴趣的countervariables。 收到一些消息后( counter=~10 )它会停止,您需要切换网络状态以获取最后一条消息,其中counter=20 。 最后一条消息也会在几分钟(通常是~10分钟)后出现,此时需要进行火力登记入住(?)。 从上面的curl命令中删除collapse_key导致收到所有20条消息(其中counter={1..20} )。 所以,问题是:这是一个错误吗? 或者我关闭(/速率有限),因为我“滥用”界面(因为所有请求发回200响应,我以为我没事)。

当我尝试使用带通知的Google Analytics时,Firebase中没有静态方法zzUr()

我开始使用Firebase云消息传递了。 我只有指南的示例代码才能使用通知和分析。 如果我没有安装Google Analytics通知工作正常,但当我添加gradle时,我尝试发送通知时遇到此错误: java.lang.NoSuchMethodError:没有静态方法zzUr()Landroid / content / Intent; 在类Lcom / google / firebase / iid / FirebaseInstanceIdInternalReceiver; 或com.google.firebase.messaging.FirebaseMessagingService.zzz上的超级类(’com.google.firebase.iid.FirebaseInstanceIdInternalReceiver’声明出现在/data/app/com.myapp.newapp-2/base.apk中)(来自android.app.ActivityThread.access $ 2200(ActivityThread.java:177)上android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3316)的com.google.firebase.iid.zzb.onStartCommand(未知来源)的未知来源在android.app.A.运行时android.O.上运行android.os.Handler.dispatchMessage(Handler.java:102)的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1547)。 app.ActivityThread.main(ActivityThread.java:5951)位于com.android.internal的java.lang.reflect.Method.invoke(Method.java:372)的java.lang.reflect.Method.invoke(Native Method)中。 os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1400)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195) 我在gradle中: compile ‘com.google.firebase:firebase-messaging:9.0.2’ compile ‘com.google.firebase:firebase-core:9.2.0’ 我的MyFirebaseMessagingService: @Override public void onMessageReceived(RemoteMessage remoteMessage) { // TODO(developer): Handle FCM messages here. // If the application is in the foreground […]

Firebase中的FCM令牌是什么?

在新的Firebase中,在通知下,他们提到开发人员可以向特定设备发送通知。 为此,在控制台中它要求一个FCM令牌。 究竟是什么,我如何获得该令牌?