Firebase访问Hackernews

问题描述 投票:3回答:2

所以我想查看Firebase并尝试连接到Hackernews Firebase数据库。我正在使用com.google.firebase:firebase-server-sdk:3.0.3 sdk。

但我不知道为什么我被迫进入服务帐户。

@Bean
fun firebase(): DatabaseReference {
    val options = FirebaseOptions.Builder()
            .setDatabaseUrl("https://hacker-news.firebaseio.com/")
            .setServiceAccount(this.javaClass.getResourceAsStream("/account.json"))
            .build()

    val app = FirebaseApp.initializeApp(options)
    val instance = FirebaseDatabase.getInstance(app)

    return instance.reference
}

为什么在这种情况下需要setServiceAccount?如果我把它留下来我得到以下例外:

Caused by: java.lang.IllegalStateException: Service Account must be provided.
at com.google.firebase.internal.Preconditions.checkState(Preconditions.java:173) ~[firebase-server-sdk-3.0.3.jar:na]
at com.google.firebase.FirebaseOptions.<init>(FirebaseOptions.java:129) ~[firebase-server-sdk-3.0.3.jar:na]

有没有办法用Java客户端匿名连接到Firebase?这个JsFiddle没有服务帐户:http://jsfiddle.net/firebase/cm8ne9nh/

如果我连接到我自己的项目,这项工作非常好。我确实为自己的项目提供了一个合适的服务帐户...

以为我可以用同样的方式连接Java。有任何想法吗 ?有没有办法使用Firebase Java API连接Hackernews

java firebase
2个回答
3
投票

不幸的是,Java SDK只有两种版本。 Java-Client-Android和Java-Server。这意味着,如果你想要纯客户端代码,你只能在android上使用它。这一直是可用客户端库的一个奇怪限制。

但是,您可以做的是将firebase提供的REST API包装为Java,使用HTTP请求执行所有操作,就像在任何客户端库中一样。

已经实现此功能的存储库示例如下:https://github.com/j-fischer/rest-on-fire

你可以使用那个,或者你可以使用自己的。但是,为了在没有服务帐户的情况下使用firebase,您必须使用REST Api或仅针对Android,iOS和Web编写的官方客户端库。


2
投票

虽然在这里的文档中并不明显

https://github.com/HackerNews/API

我发现这个REST API不需要身份验证:

https://hn.algolia.com/api

它可以在很多方面使用,包括使用Retrofit和Moshi并且不需要身份验证。

只是Kotlin的一个例子:

 interface HackerNewsService {

    @GET("search?tags=(story,show_hn,front_page)&hitsPerPage=500")
    fun searchStories(@Query("query") q: String, @Query("numericFilters") filters: String, @Query("page") page: Int): Call<SearchResult>

 }

        val response = hackerNewsService.searchStories(keyword, "created_at_i>$after", 0).execute()

        if (response.isSuccessful) {
            val searchResult: SearchResult = response.body()!!
            println("results! (${searchResult.hits.size}) $searchResult")
        } else {
            println("uh oh")
        }

api description

© www.soinside.com 2019 - 2024. All rights reserved.