在 Firebase Realtime Database 更新时触发函数。
深入探索
如需查看包含此代码示例的详细文档,请参阅以下内容:
代码示例
C#
using CloudNative.CloudEvents;
using Google.Cloud.Functions.Framework;
using Google.Events.Protobuf.Firebase.Database.V1;
using Microsoft.Extensions.Logging;
using System.Threading;
using System.Threading.Tasks;
namespace FirebaseRtdb
{
public class Function : ICloudEventFunction<ReferenceEventData>
{
private readonly ILogger _logger;
public Function(ILogger<Function> logger) =>
_logger = logger;
public Task HandleAsync(CloudEvent cloudEvent, ReferenceEventData data, CancellationToken cancellationToken)
{
_logger.LogInformation("Function triggered by change to {subject}", cloudEvent.Subject);
_logger.LogInformation("Delta: {delta}", data.Delta);
// In this example, we don't need to perform any asynchronous operations, so the
// method doesn't need to be declared async.
return Task.CompletedTask;
}
}
}
Go
// Package p contains a Cloud Function triggered by a Firebase Realtime Database
// event.
package p
import (
"context"
"fmt"
"log"
"cloud.google.com/go/functions/metadata"
)
// RTDBEvent is the payload of a RTDB event.
type RTDBEvent struct {
Data interface{} `json:"data"`
Delta interface{} `json:"delta"`
}
// HelloRTDB handles changes to a Firebase RTDB.
func HelloRTDB(ctx context.Context, e RTDBEvent) error {
meta, err := metadata.FromContext(ctx)
if err != nil {
return fmt.Errorf("metadata.FromContext: %v", err)
}
log.Printf("Function triggered by change to: %v", meta.Resource)
log.Printf("%+v", e)
return nil
}
Java
import com.google.cloud.functions.Context;
import com.google.cloud.functions.RawBackgroundFunction;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import java.util.logging.Logger;
public class FirebaseRtdb implements RawBackgroundFunction {
private static final Logger logger = Logger.getLogger(FirebaseRtdb.class.getName());
// Use GSON (https://github.com/google/gson) to parse JSON content.
private static final Gson gson = new Gson();
@Override
public void accept(String json, Context context) {
logger.info("Function triggered by change to: " + context.resource());
JsonObject body = gson.fromJson(json, JsonObject.class);
boolean isAdmin = false;
if (body != null && body.has("auth")) {
JsonObject authObj = body.getAsJsonObject("auth");
isAdmin = authObj.has("admin") && authObj.get("admin").getAsBoolean();
}
logger.info("Admin?: " + isAdmin);
if (body != null && body.has("delta")) {
logger.info("Delta:");
logger.info(body.get("delta").toString());
}
}
}
Node.js
/**
* Background Function triggered by a change to a Firebase RTDB reference.
*
* @param {!Object} event The Cloud Functions event.
* @param {!Object} context The Cloud Functions event context.
*/
exports.helloRTDB = (event, context) => {
const triggerResource = context.resource;
console.log(`Function triggered by change to: ${triggerResource}`);
console.log(`Admin?: ${!!context.auth.admin}`);
console.log('Delta:');
console.log(JSON.stringify(event.delta, null, 2));
};
PHP
use Google\CloudFunctions\CloudEvent;
function firebaseRTDB(CloudEvent $cloudevent)
{
$log = fopen(getenv('LOGGER_OUTPUT') ?: 'php://stderr', 'wb');
fwrite($log, 'Event: ' . $cloudevent->getId() . PHP_EOL);
$data = $cloudevent->getData();
$resource = $data['resource'] ?? '<null>';
fwrite($log, 'Function triggered by change to: ' . $resource . PHP_EOL);
$isAdmin = isset($data['auth']['admin']) && $data['auth']['admin'] == true;
fwrite($log, 'Admin?: ' . var_export($isAdmin, true) . PHP_EOL);
fwrite($log, 'Delta: ' . json_encode($data['delta'] ?? '') . PHP_EOL);
}
Python
import json
def hello_rtdb(data, context):
""" Triggered by a change to a Firebase RTDB reference.
Args:
data (dict): The event payload.
context (google.cloud.functions.Context): Metadata for the event.
"""
trigger_resource = context.resource
print('Function triggered by change to: %s' % trigger_resource)
print('Admin?: %s' % data.get("admin", False))
print('Delta:')
print(json.dumps(data["delta"]))
Ruby
require "functions_framework"
# Triggered by a change to a Firebase RTDB document.
FunctionsFramework.cloud_event "hello_rtdb" do |event|
# Event-triggered Ruby functions receive a CloudEvents::Event::V1 object.
# See https://cloudevents.github.io/sdk-ruby/latest/CloudEvents/Event/V1.html
# The Firebase event payload can be obtained from the `data` field.
payload = event.data
logger.info "Function triggered by change to: #{event.source}"
logger.info "Admin?: #{payload.fetch 'admin', false}"
logger.info "Delta: #{payload['delta']}"
end
后续步骤
如需搜索和过滤其他 Google Cloud 产品的代码示例,请参阅 Google Cloud 示例浏览器。