Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firebase access Hackernews

Tags:

java

firebase

So i wanted to check out Firebase and try connecting to Hackernews Firebase database. I'm using the com.google.firebase:firebase-server-sdk:3.0.3 sdk.

But I am not sure why i am forced to enter a service account.

@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
}

Why is setServiceAccount required in this case ? If i leave it out i get following exception:

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]

Is there a way to connect to Firebase anonymously with a Java client? This JsFiddle works without a service account: http://jsfiddle.net/firebase/cm8ne9nh/

If i connect to my own project, this work perfectly nice. I do have a proper service account for my own projects thought...

Thought i might be able to connect with Java the same way. Any ideas ? Is there a way to connect to Hackernews with the Firebase Java API?

like image 639
Wagner Michael Avatar asked Mar 06 '26 20:03

Wagner Michael


2 Answers

Unfortunately, the Java SDK is only available in two flavors. Java-Client-Android, and Java-Server. Which means, if you want pure client code, you can only really use it on android. This has always been a strange limitation of the available client libraries.

However, what you can do, is wrap the REST API that firebase provides with Java, using HTTP requests to perform everything like you would in any client library.

An example of a repository that has already implemented this is here: https://github.com/j-fischer/rest-on-fire

You could use that one, or you could use your own. But in order to use firebase without a service account, you will have to either use the REST Api or the official Client Libraries which are only writen for Android, iOS, and Web.

like image 141
Dylan Avatar answered Mar 08 '26 09:03

Dylan


Although in the docs here it is not obvious

https://github.com/HackerNews/API

I found this REST API that does not need authentication:

https://hn.algolia.com/api

It can be used in many ways, including with Retrofit & Moshi and no authentication.

Just one example in 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

like image 45
Blundell Avatar answered Mar 08 '26 09:03

Blundell



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!