服务器到 Firebase HTTP POST 会导致响应消息 200



使用 Java 代码(向下滚动查看) 我正在使用 FCM 向我的 Android 发送通知消息,当提供正确的服务器密钥令牌时,我收到如下所示的响应消息。

在之后从 FCM 收到以下响应消息

Response: 200
Success Message: '{"multicast_id":-1,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]}'
Error Message: ''
Process finished with exit code 0

这意味着服务器密钥令牌是正确的,并且使用 FCM 建立了某种授权。当我使用不正确的服务器密钥令牌时,我收到不同的错误消息。但是,上面的消息虽然标记为"成功消息*",但仍指出成功值 =0 和失败值 =1,错误:无效注册。如果这确实是一个错误,该错误是否意味着 FCM 未收到通知,或者端点 Android 应用程序未收到通知?

安卓应用

Android 应用程序能够使用控制台接收来自 FCM 的通知。这是否意味着 Android 应用设置为从我编写的 Java 服务器接收相同的通知,或者应用是否需要其他代码来处理这些不是从控制台发送的通知?

(仅供参考,代码干净且运行无错误,下面显示的项目并非所有文件,仅显示相关的主函数和HTTP POST文件)。

爪哇服务器

public class Sample {
private static String SERVER_KEY = "AAAA-NCJais:APA91b----CENSORED-------";
public static void main(String[] args) {
com.pushraven.Pushraven.setKey(SERVER_KEY);

// create Notification object 
Notification raven = new Notification();
HashMap<String, Object> data = new HashMap<String, Object>();
data.put("Hello", "World!");
data.put("Rami", "Imar");
data.put("Test1", "Test2");
// build raven message using the builder pattern
raven.to("/topics/ALL")
.collapse_key("a_collapse_key")
.priority(1)
.delay_while_idle(true)
.time_to_live(100)
.restricted_package_name("com.example.******")
.dry_run(true)
.data(data)
.title("Testing")
.body("Hello World!");
// push the raven message
FcmResponse response = Pushraven.push(raven);
// alternatively set static notification first.
Pushraven.setNotification(raven);
response = Pushraven.push();
// prints response code and message
System.out.println(response);
}
}

---------------------------------其他文件------------------------------

public static FcmResponse push(Notification n) {    
if(FIREBASE_SERVER_KEY == null){
System.err.println("No Server-Key has been defined.");
return null;
}
HttpsURLConnection con = null;
try{
String url = API_URL;
URL obj = new URL(url);
con = (HttpsURLConnection) obj.openConnection();
con.setRequestMethod("POST");
// Set POST headers
con.setRequestProperty("Authorization", "key="+FIREBASE_SERVER_KEY);
con.setRequestProperty("Content-Type", "application/json;charset=UTF-8");

// Send POST body
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(wr, "UTF-8"));
writer.write(n.toJSON());
writer.close();
wr.close();
wr.flush();
wr.close();
con.getResponseCode();
}
catch(Exception e){
e.printStackTrace();
}
return new FcmResponse(con);
}

InvalidRegistration错误意味着您要向其发送消息的令牌无效:

检查传递给服务器的注册令牌的格式。请确保它与客户端应用通过注册 Firebase 通知收到的注册令牌匹配。不要截断或添加其他字符。

仔细检查在to参数中传递的值。在您的代码中,我看到您正在使用news.如果您打算发送到主题,则必须添加前缀/topics/。所以它应该是像/topics/news/.有关更多详细信息,请参阅主题消息传递文档。

相关内容

  • 没有找到相关文章