Firebase 管理 REST API支持对 Firebase 项目进行编程设置和管理,包括项目的 Firebase 资源和 Firebase 应用。
本概述介绍了将 Firebase 资源和应用添加到当前未使用 Firebase 服务的现有Google Cloud 项目的一般工作流程。
如果您只想:
- 将 Firebase 服务添加到您的项目
- 将 Firebase 应用添加到您的 Firebase 项目
- 将您的 Firebase 项目关联到 Google Analytics(分析)帐户
- 确定项目的默认位置
在执行此页面上的任何步骤之前,请确保启用 API 。
有关 Firebase Management API 访问管理的信息,请访问Cloud Identity Access Management (IAM) API 文档。
在你开始之前
在开始之前,您需要为您的 Google Cloud 项目启用 Management API并生成您的访问令牌。
为您的 Google Cloud 项目启用管理 REST API
如果您还没有启用Firebase Management API以用于您的 Google Cloud 项目,则需要启用该 API。
- 在 Google API 控制台中打开Firebase Management API页面。
- 出现提示时,选择您的 Google Cloud 项目。
- 点击 Firebase 管理 API 页面上的启用。
生成您的 API 访问令牌
这是检索您的访问令牌的 Node.js 示例。
首先,如果您不在 Google Cloud 环境中,请将GOOGLE_APPLICATION_CREDENTIALS
环境变量设置为您的服务帐号密钥的路径。
Linux 或 macOS
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-file.json"
视窗
使用 PowerShell:
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\path\to\your\service-account-file.json"
然后,使用 Firebase Admin SDK 从您的服务帐户凭据中获取访问令牌:
const admin = require('firebase-admin');
function getAccessToken() {
return admin.credential.applicationDefault().getAccessToken()
.then(accessToken => {
return accessToken.access_token;
})
.catch(err => {
console.error('Unable to get access token');
console.error(err);
});
}
查找项目的资源名称
您可以找到可用于添加 Firebase 服务的 Google Cloud 项目。
要求
调用availableProjects.list
。此调用的请求正文必须为空。
以下是 Node.js 请求可用 Google Cloud 项目列表的示例:
const fetch = require('node-fetch');
async function listProjects() {
const accessToken = getAccessToken();
const uri = 'https://firebase.googleapis.com/v1beta1/availableProjects';
const options = {
method: 'GET',
headers: {
'Authorization': 'Bearer ' + accessToken,
},
};
try {
const rawResponse = await fetch(uri, options);
const resp = await rawResponse.json();
const projects = resp['projectInfo'];
console.log('Project total: ' + projects.length);
console.log('');
for (let i in projects) {
const project = projects[i];
console.log('Project ' + i);
console.log('ID: ' + project['project']);
console.log('Display Name: ' + project['displayName']);
console.log('');
}
} catch(err) {
console.error(err);
}
}
结果
调用availableProjects.list
的响应正文包含ProjectInfo
对象的列表。如果项目列表太长,响应正文还包含一个nextPageToken
,您可以将其用作查询参数以获取下一页项目。
以下是availableProjects.list
调用的示例响应正文:
{
"projectInfo": [
{
"project": "projects/first-cloud-project",
"displayName": "First Cloud Project"
},
{
"project": "projects/second-cloud-project",
"displayName": "Second Cloud Project"
}
]
}
此示例响应有两个可以添加 Firebase 服务的 Google Cloud 项目。请注意, project
字段提供项目的全局唯一资源名称。
您可以使用availableProjects.list
响应中列出的任何project
值来添加 Firebase 服务或将应用添加到您的项目。
在下一部分中,我们将使用projects/first-gcp-project
资源名称将 Firebase 服务添加到First Cloud Project
。
将 Firebase 服务添加到您的项目
Google Cloud 项目可以利用 Firebase 提供的服务。在本部分中,您将了解如何以编程方式将 Firebase 服务添加到您现有的 Google Cloud 项目中。请注意,您还可以在Firebase 控制台中将 Firebase 服务添加到您现有的 Google Cloud 项目中。
要求
调用projects.addFirebase
。此调用的请求正文必须为空。
以下是 Node.js 将 Firebase 服务添加到您的 Google Cloud 项目的示例:
const fetch = require('node-fetch');
async function addFirebase(projectId) {
const accessToken = getAccessToken();
const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + ':addFirebase';
const options = {
method: 'POST',
// Use a manual access token here since explicit user access token is required.
headers: {
'Authorization': 'Bearer ' + accessToken,
},
};
try {
const rawResponse = await fetch(uri, options);
const resp = await rawResponse.json();
console.log(resp);
} catch(err) {
console.error(err['message']);
}
}
结果
调用projects.addFirebase
的结果是Operation
。在您可以为您的项目调用其他与 Firebase 相关的端点之前,该操作必须成功。
要检查操作是否成功,您可以在操作上调用operations.get
,直到done
的值为true
并且其response
为FirebaseProject
类型。如果操作失败,则将其error
设置为google.rpc.Status
。
这是operations.get
的响应正文。get 调用:
{
"name": "operations/...",
"done": true,
"response": {
"@type": "type.googleapis.com/google.firebase.service.v1beta1.FirebaseProject",
"projectId": "first-cloud-project",
"projectNumber": "...",
"displayName": "First Cloud Project",
"name": "projects/first-cloud-project",
"resources": {
"hostingSite": "first-cloud-project",
"realtimeDatabaseInstance": "first-cloud-project"
}
}
}
由于done
是true
并且response
类型是FirebaseProject
,因此 Google Cloud 项目现在具有 Firebase 服务。响应还包含有关您新创建的FirebaseProject
的其他有用信息,例如它的projectNumber
和它的默认resources
。 Operation
完成后会自动删除。
将 Firebase 应用添加到您的项目
许多不同的应用程序都可以使用FirebaseProject
,包括 iOS、Android 和 Web 应用程序。在本节中,您将了解如何以编程方式将 Firebase 应用程序添加到您现有的FirebaseProject
。请注意,您还可以在Firebase 控制台中将 Firebase 应用程序添加到您现有的 Firebase 项目中。
选择要添加到 Firebase 项目的 Firebase 应用类型。
您可以将Firebase Android 应用添加到现有 Firebase 项目中。
要求
调用projects.androidApps.create
。以下是构建请求正文的方法:
必需的:
-
packageName
:Android 应用的规范包名称,它会出现在 Google Play 开发者控制台中。
-
可选,但推荐:
-
displayName
:用户分配的应用显示名称。此值对于稍后在Firebase 控制台中查找您的应用很有用。
-
在我们示例的请求正文中,我们将使用packageName
和displayName
:
{
"displayName": "My Firebase Android App"
"packageName": "com.firebase.android"
}
这是 Node.js 将 Firebase Android 应用程序添加到您的 Firebase 项目的示例:
const fetch = require('node-fetch');
async function addAndroidApp(projectId, displayName, packageName) {
const accessToken = getAccessToken();
const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + '/androidApps';
const options = {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + accessToken,
},
body: JSON.stringify({
'displayName': displayName,
'packageName': packageName
}),
};
try {
const rawResponse = await fetch(uri, options);
const resp = await rawResponse.json();
console.log(resp);
} catch(err) {
console.error(err['message']);
}
}
结果
调用projects.androidApps.create
的结果是Operation
。在您可以为您的项目调用其他与 Firebase 相关的端点之前,该操作必须成功。
要检查操作是否成功,您可以在操作上调用operations.get
直到done
的值为true
并且其response
为AndroidApp
类型。如果操作失败,则将其error
设置为google.rpc.Status
。
这是operations.get
的响应正文。get 调用:
{
"name": "operations/...",
"done": true,
"response": {
"@type": "type.googleapis.com/google.firebase.service.v1beta1.AndroidApp",
"name": "projects/first-cloud-project/androidApps/...",
"appId": "...",
"displayName": "My Firebase Android App",
"projectId": "first-cloud-project",
"packageName": "com.firebase.android"
}
}
因为done
是true
并且response
类型是AndroidApp
,所以FirebaseProject
现在有一个AndroidApp
。该响应还包含有关您新创建的 Firebase Android 应用的其他有用信息,例如唯一的 Firebase appId
。 Operation
完成后会自动删除。
添加 SHA 证书
您可以通过调用projects.androidApps.sha.create
将 SHA 证书添加到任何现有的 Firebase Android 应用。此方法调用的请求正文必须有一个空的name
字段。此调用的结果是新创建的ShaCertificate
实例。
调用projects.androidApps.sha.create
时,您需要提供有效的 SHA-1 或 SHA-256 证书哈希。您可以使用 gradle signingReport
命令获取签名证书的 SHA 哈希:
./gradlew signingReport
有关更多信息,请访问适用于 Android 的 Google API 。
将您的 Firebase 项目与 Google Analytics(分析)帐户相关联(可选)
您可以以编程方式将现有的Google Analytics(分析)帐户链接到现有的FirebaseProject
。请注意,您还可以在Project Settings的Integrations选项卡中将现有 Firebase 项目链接到 Google Analytics。
对projects.addGoogleAnalytics
的调用需要一个analytics_resource
,它可以是一个analyticsAccountId
或一个analyticsPropertyId
:
指定现有的
analyticsAccountId
以在指定帐户中配置新的 Google Analytics(分析)媒体资源,并将新媒体资源与您的 Firebase 项目相关联。指定现有的
analyticsPropertyId
以将 Google Analytics(分析)媒体资源与您的 Firebase 项目相关联。
您可以在Google Analytics 网站上找到您的analyticsAccountId
和任何现有的analyticsPropertyId
。
当您调用projects.addGoogleAnalytics
时:
第一项检查确定 Google Analytics 属性中的任何现有数据流是否与您的
FirebaseProject
中的任何现有 Firebase 应用相对应(基于与数据流关联的packageName
或bundleId
)。然后,在适用的情况下,数据流和应用程序被链接。请注意,此自动链接仅适用于 Android 应用程序和 iOS 应用程序。如果没有为您的 Firebase 应用找到相应的数据流,则会在 Google Analytics(分析)属性中为您的每个 Firebase 应用配置新的数据流。请注意,始终会为 Web 应用程序配置新的数据流,即使它之前与您的 Analytics 媒体资源中的数据流相关联。
在 Google Analytics(分析)文档中详细了解 Google Analytics(分析)帐户的层次结构和结构。
要求
调用projects.addGoogleAnalytics
。
在我们对project.addGoogleAnalytics
的示例调用的请求正文中,我们将指定我们的 Google Analytics 帐户analyticsAccountId
。此调用将配置一个新的 Google Analytics 属性并将新属性与FirebaseProject
相关联。
{
"analyticsAccountId": "<your-google-analytics-account-id>"
}
以下是 Node.js 将 Firebase 项目与 Google Analytics(分析)帐户相关联的示例:
const fetch = require('node-fetch');
async function addGoogleAnalytics(projectId, analyticsAccountId) {
const accessToken = getAccessToken();
const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + ':addGoogleAnalytics';
const options = {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + accessToken,
},
body: JSON.stringify({
'analyticsAccountId': analyticsAccountId
}),
};
try {
const rawResponse = await fetch(uri, options);
const resp = await rawResponse.json();
console.log(resp);
} catch(err) {
console.error(err['message']);
}
}
结果
调用projects.addGoogleAnalytics
的结果是Operation
。在您可以为您的项目调用其他与 Firebase 相关的端点之前,该操作必须成功。
要检查操作是否成功,您可以在操作上调用operations.get
直到done
的值为true
并且response
的类型为analyticsDetails
。如果操作失败,则将其error
设置为google.rpc.Status
。
这是operations.get
的响应正文。get 调用:
{
"name": "operations/...",
"none": true,
"response": {
"@type": "type.googleapis.com/google.firebase.service.v1beta1.AnalyticsDetails",
"analyticsProperty": [
{
"id": "...",
"displayName": "..."
}
],
"streamMappings": [
{
"app": "...",
"streamId": "...",
"measurementId": "..."
}
]
}
}
由于done
为 true 且response
类型为analyticsDetails
,因此FirebaseProject
现在已链接到指定的 Google Analytics 帐户。 Operation
完成后会自动删除。
确定项目的默认位置(可选)
如果您的 Firebase 项目将使用 Cloud Firestore、Cloud Storage 或 App Engine 应用,您可以通过编程方式为您的项目最终确定默认的 Google Cloud Platform (GCP) 资源位置。请注意,您还可以在Firebase 控制台中选择一个位置。
在设置此位置之前,请查看为您的项目选择位置以获取有关哪个位置最适合您的项目的信息。您还应该调用projects.availableLocations
以返回项目的有效位置列表,因为如果您的项目是 Google Cloud 组织的一部分,那么您的组织政策可能会限制哪些位置对您的项目有效。
调用此defaultLocation.finalize
方法会创建一个 App Engine 应用程序,其默认 Cloud Storage 存储桶位于您在请求正文中提供的locationId
中。
如果Project
已经有 App Engine 应用程序或之前调用了此defaultLocation.finalize
方法,则可能已经指定了默认 GCP 资源位置。
要求
调用projects.defaultLocation.finalize
。以下是构建请求正文的方法:
必需的:
-
locationId
:为需要位置设置的 GCP 服务(例如 Cloud Firestore 或 Cloud Storage)存储数据的位置。
-
{
"locationId": "us-west2"
}
这是 Node.js 最终确定项目默认位置的示例:
const fetch = require('node-fetch');
async function finalizeProjectLocation(projectId, locationId) {
const accessToken = getAccessToken();
const uri = 'https://firebase.googleapis.com/v1beta1/projects/' + projectId + '/defaultLocation:finalize';
const options = {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + accessToken,
},
body: JSON.stringify({
'locationId': locationId
}),
};
try {
const rawResponse = await fetch(uri, options);
const resp = await rawResponse.json();
console.log(resp);
} catch(err) {
console.error(err['message']);
}
}
结果
调用projects.defaultLocation.finalize
的结果是Operation
。在您可以为您的项目调用其他与 Firebase 相关的端点之前,该操作必须成功。
要检查操作是否成功,您可以在操作上调用operations.get
直到done
的值为true
并且其response
为google.protobuf.Empty
类型。如果操作不成功,响应正文error
将是google.rpc.Status
类型。 Operation
完成后会自动删除。