java - 错误 Firebase Cloud Messaging FCM,无法发送消息
问题描述
我正在使用 firebase 云消息尝试从我的应用程序内部向特定主题发送消息。但是我的程序遇到“消息无法转换为 RemoteMessage”错误,如下面的代码所示。我从这里和这里获取了代码,他们都在使用这个代码,但不知何故它似乎运行良好。
我的 build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.firebaseteste"
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
annotationProcessor 'com.google.firebase:firebase-core:16.0.8'
implementation ('com.google.firebase:firebase-core:16.0.8'){
exclude module: 'firebase-common'
}
annotationProcessor 'com.google.firebase:firebase-messaging:17.5.0'
implementation ('com.google.firebase:firebase-messaging:17.5.0'){
exclude module: 'firebase-common'
}
annotationProcessor 'com.google.firebase:firebase-admin:6.3.0'
implementation 'com.google.firebase:firebase-admin:6.3.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
apply plugin: 'com.google.gms.google-services'
package com.example.firebaseteste;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.messaging.FirebaseMessaging;
import com.google.firebase.messaging.FirebaseMessagingException;
import com.google.firebase.messaging.Message;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new FCMService().send();
}
public class FCMService {
public void send() {
try {
GoogleCredentials fromStream = GoogleCredentials.fromStream(new FileInputStream(new File("pathToFile")));
FirebaseOptions firebaseOptions = new FirebaseOptions.Builder()
.setConnectTimeout(10000)
.setCredentials(fromStream)
.setDatabaseUrl("database url") // you can get this from Firebase -> Project settings -> Service Accounts -> Java
.build();
FirebaseApp firebaseApp = FirebaseApp.initializeApp(firebaseOptions);
FirebaseMessaging firebaseMessaging = FirebaseMessaging.getInstance();
Message message = Message.builder()
.putData("score", "850")
.putData("time", "NOW")
.setTopic("topic")
.build();
//LINE WITH ERROR
String response = firebaseMessaging.send(message);
System.out.println(response);
Toast.makeText(MainActivity.this, response, Toast.LENGTH_LONG);
} catch (FirebaseMessagingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
解决方案
推荐阅读
- javascript - 如何通过 Gulp 修复 Html 中 PHP 插入的格式?
- spring - 试图创建 Maven 项目得到这个错误
- wpf - 在 OnApplyTemplate 有机会在根元素上设置 DataContext 之前出现 CustomControl 绑定错误
- macos - 为什么条码扫描仪从条码中读取错误值
- python - 在csv文件Python中的位置列表中查找所有位置之间最近的位置
- c++ - 实例变量值未正确打印
- python - 使用 concat 作为字典我得到错误:第一个参数必须是 pandas 对象的可迭代对象,您传递了一个“DataFrame”类型的对象
- laravel - Laravel OneToMany 关系没有将正确的数据链接在一起
- python - Python Multiplication different shape to numpy dot product
- node.js - TypeError 无法将属性“firstName”设置为 null