通过Firebase从Android调用云功能

tvk*_*ers 17 android firebase google-cloud-functions

情况

我创建了一个Google Cloud功能functions.https.onRequest,当我将其在浏览器中粘贴并与我的Firebase设置很好地集成时,它运行良好.这个函数有点像从后端公开的API方法,我想从客户端调用它.在此特定实例中,客户端是Android应用程序.

有什么方法可以通过Firebase调用Cloud Function来执行HTTP请求吗?或者我还需要执行手动HTTP请求吗?

Dim*_*ira 19

从版本12.0.0开始,您可以更简单的方式调用云功能

在您的添加中添加以下行 build.gradle

implementation 'com.google.firebase:firebase-functions:16.3.0'
Run Code Online (Sandbox Code Playgroud)

并使用以下代码

FirebaseFunctions.getInstance() // Optional region: .getInstance("europe-west1")
    .getHttpsCallable("myCoolFunction")
    .call(optionalObject)
    .addOnFailureListener {
        Log.wtf("FF", it) 
    }
    .addOnSuccessListener {
        toast(it.data.toString())
    }
Run Code Online (Sandbox Code Playgroud)

您可以安全地在主线程上使用它.回调也在主线程上触发.


Fra*_*len 11

这里有一个firebaser

更新:有现在一个客户端SDK,使您可以直接从支持的设备叫云功能.有关示例和最新更新,请参阅Dima的答案.

原答案如下......


@ looptheloop88是正确的.没有用于从Android应用调用 Google Cloud Functions的SDK .我肯定会提交功能请求.

但目前这意味着您应该使用从Android调用HTTP端点的常规方法:


Sir*_*lot 6

现在不可能,但正如在另一个答案中所提到的,您可以使用来自Android 的HTTP请求触发功能.如果这样做,使用身份验证机制保护您的功能非常重要.这是一个基本的例子:

'use strict';

var functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.helloWorld = functions.https.onRequest((request, response) => {
  console.log('helloWorld called');
  if (!request.headers.authorization) {
      console.error('No Firebase ID token was passed');
      response.status(403).send('Unauthorized');
      return;
  }
  admin.auth().verifyIdToken(request.headers.authorization).then(decodedIdToken => {
    console.log('ID Token correctly decoded', decodedIdToken);
    request.user = decodedIdToken;
    response.send(request.body.name +', Hello from Firebase!');
  }).catch(error => {
    console.error('Error while verifying Firebase ID token:', error);
    response.status(403).send('Unauthorized');
  });
});
Run Code Online (Sandbox Code Playgroud)

要在Android中获取令牌,您应该使用此功能,然后将其添加到您的请求中,如下所示:

connection = (HttpsURLConnection) url.openConnection();
...
connection.setRequestProperty("Authorization", token);
Run Code Online (Sandbox Code Playgroud)