我是Firebase的新手,我的Java应用程序尝试使用客户端的Firebase令牌发送通知/消息时,遇到了错误,例如发送者ID不匹配和HTTP状态为401的身份验证错误。请注意,使用Firebase控制台,我可以将消息发送到客户端。
对于客户端应用程序,我执行了以下操作:
messaging
从此处克隆了Firebase 快速入门应用程序-https : //github.com/firebase/quickstart-android/tree/master/messaging-已使用Firebase依赖项等进行了设置。已将克隆的应用加载到中Android Studio
。My Notification Client
并使用com.google.firebase.quickstart.fcm
作为Android应用程序的程序包名称添加一个应用程序。google-services.json
已将Android应用程序的下载文件添加到新创建的项目中,并将其复制到该messaging/app/
文件夹中,并与中的成绩文件进行同步Android Studio
。Android Studio
。当应用程序在模拟器中得到了加载,点击Log Token
按钮捕获客户端的火力地堡令牌中Android Monitor
的选项卡Android Studio
。My Notification Client
,单击Notifications
左窗格中的链接,然后通过粘贴上一步中捕获的Firebase令牌向设备发送通知。这很棒!下一步是使用单独的简单Java应用程序(最终将成为通知服务器)将通知发送到客户端,而不是使用Firebase控制台。
为此,我遵循了此处概述的步骤-https:
//firebase.google.com/docs/server/setup#prerequisites。具体来说,这些是我执行的步骤:
My Notification Server
在Firebase控制台中创建了一个新项目。Settings > Permissions
在Firebase控制台中使用,创建一个新的服务帐户并下载serviceAccountCredentials.json
文件。在Eclipse中创建了一个新的maven项目,并在pom.xml中添加了以下依赖项:
<dependency>
<groupId>com.google.gcm</groupId>
<artifactId>gcm-server</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-server-sdk</artifactId>
<version>3.0.0</version>
</dependency>
然后,我扩展com.google.android.gcm.sender.Sender
为创建FCMSender
和覆盖受保护的方法getConnection(String url)
以使用新的FCM端点,如下所示:
class FCMSender extends Sender {
public FCMSender(String key) {
super(key);
}
@Override
protected HttpURLConnection getConnection(String url) throws IOException {
String fcmUrl = "https://fcm.googleapis.com/fcm/send";
return (HttpURLConnection) new URL(fcmUrl).openConnection();
}
}
main()
我的Java应用程序的方法如下所示:
public static void main(String[] args) {
// Obtain serverKey from Project Settings -> Cloud Messaging tab
// for "My Notification Client" project in Firebase Console.
String serverKey = <get_server_key_from_firebase_console>;
Thread t = new Thread() {
public void run(){
try {
Sender sender = new FCMSender(serverKey);
Message message = new Message.Builder()
.collapseKey("message")
.timeToLive(3)
.delayWhileIdle(true)
.addData("message", "Notification from Java application");
.build();
// Use the same token(or registration id) that was earlier
// used to send the message to the client directly from
// Firebase Console's Notification tab.
Result result = sender.send(message,
"APA91bFfIFjSCcSiJ111rbmkpnMkZY-Ej4RCpdBZFZN_mYgfHwFlx-M1UXS5FqDBcN8x1efrS2md8L9K_E9N21qB-PIHUqQwmF4p7Y3U-86nCGH7KNkZNjjz_P_qjcTR0TOrwXMh33vp",
1);
System.out.println("Result: " + result.toString());
} catch (Exception e) {
e.printStackTrace();
}
};
t.start;
try {
t.join();
}
catch (InterruptedException iex) {
iex.printStackTrace();
}
}
当我运行Java应用程序时,MismatchSenderId
出现错误。我尝试使用进行故障排除curl
,如下所示,但出现了相同的错误:
$ skey=<obtained_from_project_settings_cloud_messaging_tab_in_firebase_console>
$ curl -X POST --header "Authorization: key=$skey" \
--Header "Content-Type: application/json" \
https://fcm.googleapis.com/fcm/send \
-d "{\"to\":\"APA91bFfIFjSCcSiJ111rbmkpnMkZY-Ej4RCpdBZFZN_mYgfHwFlx-M1UXS5FqDBcN8x1efrS2md8L9K_E9N21qB-PIHUqQwmF4p7Y3U-86nCGH7KNkZNjjz_P_qjcTR0TOrwXMh33vp\",\"data\":{\"message\":\"Yellow\"}}"
{"multicast_id":7391851081942579857,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"MismatchSenderId"}]}
我没有使用Firebase控制台中项目的选项卡上Server Key
列出的内容,而是尝试使用,但导致了。Project Settings > Cloud Messaging``My Notification Server``Project Number``InvalidRequestException: HTTP Status Code: 401
Firebase错误代码文档说明了以下内容MismatchSenderId
:
发送方不匹配200 +
error:MismatchSenderId
注册令牌已绑定到特定的一组发送方。客户端应用程序注册FCM时,必须指定允许哪些发件人发送消息。将消息发送到客户端应用程序时,应使用这些发件人ID之一。如果您切换到其他发件人,则现有的注册令牌将不起作用。
我不知道在Firebase控制台中可以在何处/如何配置Android应用程序(已添加到My Notification Client
项目中)以能够接收消息。
任何帮助,将不胜感激!
我遇到了同样的问题。问题出在行中:
String serverKey = <get_server_key_from_firebase_console>;
此值应来自Android应用程序项目;在这种情况下,它将是“我的通知客户端”,而不是“我的通知服务器”。
我是Firebase新手,当我的Java应用程序尝试使用客户端的Firebase令牌发送通知/消息时,我遇到了一些错误,例如发送者id不匹配和HTTP状态401的身份验证错误。请注意,使用Firebase控制台,我能够将消息发送到客户端。 对于客户端应用程序,我执行了以下操作: 从这里克隆Firebase快速入门应用--https://github.com/firebase/quickstart-
我最近不得不迁移我的应用程序,复制并粘贴了一大堆代码。现在,当我构建项目时,我会在控制台中获得通常的firebase输出,但这次它是重复的。有谁知道可能导致这种情况的原因。代码太多,我无法完成
我对通过关联has_many有问题。不知何故 u.groups.create!(:名称 = (0.1ms)开始事务SQL(4.5ms)插入"组"("created_at","findeble","name","学校","updated_at")值 (?, ?, ?, ?, ?) [["created_at", Tue,01 Oct 2013 08:13:36 UTC 00:00],["findeb
我在一个Spring Boot应用程序中使用Logback。我在logback.xml中有配置。我试图为应用程序中的不同进程编写单独的日志文件。 无论如何,当我试图记录它总是写入控制台的文件时,它不会向文件本身写入任何内容。如果我尝试检查记录器实例本身(在转换为日志记录程序实例之后): 它向我展示了记录器的上下文是根记录器本身,并且没有附加到它的文件(因此是控制台编写)我需要对配置进行哪些更改才能
问题内容: 我可以配置为将日志写在文件上,而不是在控制台上打印吗? 问题答案: 2013年更新- 围绕Node v0.2和v0.4编写;现在,围绕日志记录有更好的工具。我强烈推荐温斯顿 2013年末更新- 我们仍然使用winston,但现在有了记录器库,用于围绕自定义对象的记录和格式来包装功能。这是我们logger.js的示例 https://gist.github.com/rtgibbons/7
我实现了Firebase,并测试了Firebase通知。当应用程序处于前台时,我没有问题,我实现了一个扩展FirebaseMessagingService的服务,并处理onMessageReceived中的消息和数据 我有问题,当应用程序在后台,我想发送一个通知,打开一个特定的活动,并做我计划做的事情,而不仅仅是打开应用程序。 我按照Firebase指南中描述的那样做了,但我无法启动特定的活动。