【问题标题】:Java Application to push data to Firebase将数据推送到 Firebase 的 Java 应用程序
【发布时间】:2018-08-19 00:49:08
【问题描述】:

我正在尝试构建 java 应用程序来检索数据并将其保存到 Firebase 数据库。 我已经关注this link 并下载了服务帐户详细信息,并在项目中使用了相同的信息。我正在 IntelliJ 上构建一个项目并添加了所需的所有依赖项。但我无法在 Firebase 中保存/检索任何数据。 运行代码时我没有收到任何错误。

public class Database {
private static final String DATABASE_URL = "https://DATABASE-NAME.firebaseio.com";
private static final String FILE_NAME = "services-account-downloaded-file.json";
private static DatabaseReference database;

public static void main(String args[]) {
    // Initialize Firebase
    try {
        // [START initialize]
        FileInputStream serviceAccount = new FileInputStream(FILE_NAME);

        FirebaseOptions options = new FirebaseOptions.Builder()
                .setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
                .setDatabaseUrl(DATABASE_URL)
                .setDatabaseAuthVariableOverride(null)
                .build();
        FirebaseApp.initializeApp(options);
        // [END initialize]
    } catch (IOException e) {
        System.out.println("ERROR: invalid service account credentials. See README.");
        System.out.println(e.getMessage());

        System.exit(1);
    }
    // Shared Database reference
    database = FirebaseDatabase.getInstance().getReference();
    startListeners();
    try {
        Thread.sleep(20000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

public static void startListeners() {
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference ref = database.getReference().child("user");
    ref.setValue("userdata", new DatabaseReference.CompletionListener() {
        @Override
        public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
            if (databaseError != null) {
                System.out.println("Data could not be saved " + databaseError.getMessage());
            } else {
                System.out.println("Data saved successfully.");
            }
        }
    });
}

}

【问题讨论】:

  • 将您的数据库规则更改为读取:true 和写入:true
  • 已添加{ "rules": { ".read": true, ".write": true } }
  • @PeterHaddad firebase-admin 不需要。使用服务帐户初始化 SDK 可以使其完全访问所有内容。

标签: java firebase firebase-realtime-database firebase-admin


【解决方案1】:

注意:FirebaseCredential 已被弃用,取而代之的是 GoogleCredentials。

尝试将您的初始化块更改为:

       // [START initialize]
    FileInputStream serviceAccount = new FileInputStream(FILE_NAME);

    GoogleCredentials credentials = GoogleCredentials
        .fromStream(serviceAccount)
        .createScoped(Arrays.asList("https://www.googleapis.com/auth/firebase.database"));

    FirebaseOptions options = new FirebaseOptions.Builder()
            .setCredentials(credentials)
            .setDatabaseUrl(DATABASE_URL)
            .build();
    FirebaseApp.initializeApp(options);
    // [END initialize]

【讨论】:

  • 弃用只是意味着 API 将在一段时间内消失,而不是它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多