我正在尝试使用Java应用程序中的令牌向单个设备发送消息。我正在使用Firebase Admin SDK。以下是我的内容
FileInputStream serviceAccount = null;
try {
serviceAccount = new FileInputStream("google-services.json");
} catch (FileNotFoundException e2) {
e2.printStackTrace();
}
FirebaseOptions options = null;
try {
options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setDatabaseUrl("https://MYPROJECTID.firebaseio.com/")
.build();
} catch (IOException e1) {
e1.printStackTrace();
}
FirebaseApp.initializeApp(options);
String registrationToken = "MYDEVICETOKEN";
// See documentation on defining a message payload.
Message message = Message.builder().putData("time", "2:45").setToken(registrationToken)
.build();
// Send a message to the device corresponding to the provided
// registration token.
String response = null;
try {
response = FirebaseMessaging.getInstance().sendAsync(message).get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);
但我得到以下异常
java.io.IOException: Error reading credentials from stream, 'type' field not specified.
我在这里做错了什么?
答案 0 :(得分:0)
错误表示您的google-services.json
文件包含无效数据。 GoogleCredentials
类要求您的文件具有type
属性,但它不存在。
简短的谷歌搜索给了我关于非常类似问题的this帖子。它说:
从API管理器中,只需创建选择"创建凭据" > "服务帐户密钥"并为服务生成新密钥 与您的Google Play帐户相关联。
答案 1 :(得分:0)