Я бы хотел отправить запрос из моего Android приложения в Google Firebase с помощью функций Google.
Поэтому я определил API-интерфейс на стороне клиента, например:
interface MyApi {
/**
* Get the list of the pots from the API
*/
@GET("/posts")
fun getPosts(): Observable<List<Post>>
@POST("/addUser")
fun addUser(@Query("name") name: String, @Query("token") token: String): Observable<User>
}
В ModelView я отправляю запрос, используя RX Java, например:
subscription = Observable.fromCallable{ loveDateApi.addUser(name, token) }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe( { result -> println("Result: $result") },
{error -> println("Error: $error")})
Пользовательский объект, который я наблюдаю, выглядит следующим образом:
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.google.gson.annotations.Expose
@Entity
data class User(
@Expose
@field:PrimaryKey
val idUser: Int,
@Expose
val token: String,
@Expose
val name: String,
@Expose
val age: Int
)
Мой сетевой модуль, в котором я предоставляю Модернизация выглядит следующим образом (только выдержка):
´´´
@Provides
@Reusable
@JvmStatic
internal fun provideRetrofitInterface(): Retrofit {
return Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
.build()
}
´´´
На стороне сервера развернутая мной облачная функция Google выглядит так :
exports.addUser = functions.https.onRequest(async (request:any,response:any) => {
// read parameters from request
const name = request.query.name
const token = request.query.token
const data = {
name: name,
age: 30,
token: token
}
// use add if no doc-ID is specified else use set
const idUser = (await db.collection(collectionUser).add(data)).id
const newData = {
idUser: idUser,
}
const userRef = db.collection(collectionUser).doc(idUser)
await userRef.update(newData)
const newUserRef = await userRef.get()
response.send(newUserRef.data())
})
Использование почтальона для отправки запроса в облачные функции работает, но, к сожалению, не в клиентском приложении.
Есть идеи?