Google 致力于为黑人社区推动种族平等。查看具体举措

أضف Firebase Admin SDK إلى خادمك

Admin SDK عبارة عن مجموعة من مكتبات الخوادم التي تتيح لك التفاعل مع Firebase من بيئات مميزة لتنفيذ إجراءات مثل:

  • قراءة وكتابة بيانات Realtime Database بامتيازات المسؤول الكاملة.
  • أرسل رسائل Firebase Cloud Messaging برمجيًا باستخدام نهج بديل بسيط لبروتوكولات خادم Firebase Cloud Messaging.
  • أنشئ رموز مصادقة Firebase وتحقق منها.
  • الوصول إلى موارد Google Cloud مثل حاويات التخزين السحابي وقواعد بيانات Cloud Firestore المرتبطة بمشاريع Firebase.
  • قم بإنشاء وحدة تحكم المشرف المبسطة الخاصة بك للقيام بأشياء مثل البحث عن بيانات المستخدم أو تغيير عنوان البريد الإلكتروني للمستخدم للمصادقة.

إذا كنت مهتمًا باستخدام Node.js SDK كعميل لوصول المستخدم النهائي (على سبيل المثال ، في سطح مكتب Node.js أو تطبيق IoT) ، بدلاً من وصول المسؤول من بيئة مميزة (مثل الخادم) ، فأنت بدلاً من ذلك ، يجب اتباع الإرشادات الخاصة بإعداد عميل JavaScript SDK .

إليك مصفوفة ميزات توضح ميزات Firebase المدعومة في كل لغة:

ميزة Node.js جافا بايثون يذهب سي #
سك العملة المعدنية المخصصة
التحقق من رمز الهوية
إدارةالمستخدم
التحكم في الوصول مع المطالبات المخصصة
تحديث إبطال الرمز المميز
استيراد المستخدمين
إدارة ملفات تعريف الارتباط للجلسة
إنشاء روابط إجراءات البريد الإلكتروني
إدارة تكوينات موفر SAML / OIDC
دعم متعدد الإيجارات
قاعدة بيانات الوقت الفعلي *
Firebase Cloud Messaging
الإرسال المتعدد FCM
إدارة اشتراكات FCM موضوع
سحابة التخزين
سحابة Firestore
ادارة مشروع
قواعد الأمان
إدارة نموذج ML
تهيئة Firebase عن بُعد
فحص تطبيق Firebase

لمعرفة المزيد حول تكامل Admin SDK لهذه الاستخدامات ، راجع وثائق Realtime Database و FCM والمصادقة والتكوين عن بُعد والتخزين السحابي . تركز بقية هذه الصفحة على الإعداد الأساسي لـ Admin SDK.

المتطلبات الأساسية

  • تأكد من أن لديك تطبيق خادم.

  • تأكد من تشغيل خادمك لما يلي بناءً على Admin SDK الذي تستخدمه:

    • Admin Node.js SDK - Node.js 14+
    • المسؤول Java SDK - Java 8+
    • Admin Python SDK - Python 3.6+ (يوصى باستخدام Python 3.7+)
    • Admin Go SDK - Go 1.15+
    • مسؤول .NET SDK - .NET Framework 4.6.1+ أو .NET Standard 2.0 لـ .Net Core 2.0+

إعداد مشروع Firebase وحساب الخدمة

لاستخدام Firebase Admin SDK ، ستحتاج إلى ما يلي:

  • مشروع Firebase.
  • حساب خدمة Firebase Admin SDK للتواصل مع Firebase. يتم إنشاء حساب الخدمة هذا تلقائيًا عند إنشاء مشروع Firebase أو إضافة Firebase إلى مشروع Google Cloud.
  • ملف تكوين ببيانات اعتماد حساب الخدمة الخاص بك.

إذا لم يكن لديك بالفعل مشروع Firebase ، فستحتاج إلى إنشاء واحد في وحدة تحكم Firebase . تفضل بزيارة فهم مشاريع Firebase لمعرفة المزيد حول مشاريع Firebase.

أضف SDK

إذا كنت تقوم بإعداد مشروع جديد ، فأنت بحاجة إلى تثبيت SDK للغة التي تختارها.

Node.js

يتوفر Firebase Admin Node.js SDK على npm. إذا لم يكن لديك بالفعل ملف package.json ، فأنشئ ملفًا عبر npm init . بعد ذلك ، قم بتثبيت حزمة firebase firebase-admin npm وحفظها في الحزمة الخاصة بك. package.json :

$ npm install firebase-admin --save

لاستخدام الوحدة في تطبيقك ، require من أي ملف JavaScript:

const { initializeApp } = require('firebase-admin/app');

إذا كنت تستخدم ES2015 ، فيمكنك import الوحدة:

import { initializeApp } from 'firebase-admin/app';

جافا

يتم نشر Firebase Admin Java SDK إلى مستودع Maven المركزي. لتثبيت المكتبة ، أعلن أنها تبعية في ملف build.gradle الخاص بك:

dependencies {
  implementation 'com.google.firebase:firebase-admin:9.0.0'
}

إذا كنت تستخدم Maven لبناء تطبيقك ، فيمكنك إضافة التبعية التالية إلى pom.xml الخاص بك:

<dependency>
  <groupId>com.google.firebase</groupId>
  <artifactId>firebase-admin</artifactId>
  <version>9.0.0</version>
</dependency>

بايثون

يتوفر Firebase Admin Python SDK عبر نقطة . يمكنك تثبيت المكتبة لجميع المستخدمين عبر sudo :

$ sudo pip install firebase-admin

أو يمكنك تثبيت المكتبة للمستخدم الحالي فقط عن طريق تمرير علامة --user :

$ pip install --user firebase-admin

يذهب

يمكن تثبيت Go Admin SDK باستخدام الأداة المساعدة go get :

# Install as a module dependency
$ go get firebase.google.com/go/v4

# Install to $GOPATH
$ go get firebase.google.com/go

سي #

يمكن تثبيت .NET Admin SDK باستخدام مدير الحزم .NET:

$ Install-Package FirebaseAdmin -Version 2.3.0

بدلاً من ذلك ، قم بتثبيته باستخدام الأداة المساعدة لسطر أوامر dotnet :

$ dotnet add package FirebaseAdmin --version 2.3.0

أو يمكنك تثبيته عن طريق إضافة إدخال مرجع الحزمة التالي إلى ملف .csproj الخاص بك:

<ItemGroup>
  <PackageReference Include="FirebaseAdmin" Version="2.3.0" />
</ItemGroup>

تهيئة SDK

بمجرد إنشاء مشروع Firebase ، يمكنك تهيئة SDK باستخدام إستراتيجية ترخيص تجمع ملف حساب الخدمة الخاص بك مع بيانات الاعتماد الافتراضية لتطبيق Google .

تدعم مشاريع Firebase حسابات خدمة Google ، والتي يمكنك استخدامها للاتصال بواجهات برمجة تطبيقات خادم Firebase من خادم التطبيق أو البيئة الموثوقة. إذا كنت تقوم بتطوير التعليمات البرمجية محليًا أو نشر تطبيقك محليًا ، فيمكنك استخدام بيانات الاعتماد التي تم الحصول عليها عبر حساب الخدمة هذا لتفويض طلبات الخادم.

لمصادقة حساب خدمة وتفويضه للوصول إلى خدمات Firebase ، يجب عليك إنشاء ملف مفتاح خاص بتنسيق JSON.

لإنشاء ملف مفتاح خاص لحساب الخدمة الخاص بك:

  1. في وحدة تحكم Firebase ، افتح الإعدادات> حسابات الخدمة .

  2. انقر فوق إنشاء مفتاح خاص جديد ، ثم قم بالتأكيد بالنقر فوق إنشاء مفتاح .

  3. قم بتخزين ملف JSON الذي يحتوي على المفتاح بشكل آمن.

عند التفويض عبر حساب خدمة ، لديك خياران لتقديم بيانات الاعتماد لتطبيقك. يمكنك إما تعيين متغير بيئة GOOGLE_APPLICATION_CREDENTIALS ، أو يمكنك صراحة تمرير المسار إلى مفتاح حساب الخدمة في التعليمات البرمجية. الخيار الأول أكثر أمانًا ويوصى به بشدة.

لتعيين متغير البيئة:

اضبط متغير البيئة GOOGLE_APPLICATION_CREDENTIALS على مسار ملف ملف JSON الذي يحتوي على مفتاح حساب الخدمة. ينطبق هذا المتغير فقط على جلسة shell الحالية ، لذلك إذا فتحت جلسة جديدة ، فقم بتعيين المتغير مرة أخرى.

Linux أو macOS

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

شبابيك

مع بوويرشيل:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

بعد الانتهاء من الخطوات المذكورة أعلاه ، يمكن لبيانات اعتماد التطبيق الافتراضية (ADC) تحديد بيانات الاعتماد الخاصة بك بشكل ضمني ، مما يسمح لك باستخدام بيانات اعتماد حساب الخدمة عند الاختبار أو التشغيل في بيئات غير تابعة لـ Google.

قم بتهيئة SDK كما هو موضح:

Node.js

initializeApp({
    credential: applicationDefault(),
    databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});

جافا

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.getApplicationDefault())
    .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
    .build();

FirebaseApp.initializeApp(options);

بايثون

default_app = firebase_admin.initialize_app()

يذهب

app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

سي #

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
});

استخدام رمز تحديث OAuth 2.0 المميز

يوفر Admin SDK أيضًا بيانات اعتماد تتيح لك المصادقة باستخدام رمز تحديث Google OAuth2 المميز:

Node.js

const myRefreshToken = '...'; // Get refresh token from OAuth2 flow

initializeApp({
  credential: refreshToken(myRefreshToken),
  databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});

جافا

FileInputStream refreshToken = new FileInputStream("path/to/refreshToken.json");

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.fromStream(refreshToken))
    .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
    .build();

FirebaseApp.initializeApp(options);

بايثون

cred = credentials.RefreshToken('path/to/refreshToken.json')
default_app = firebase_admin.initialize_app(cred)

يذهب

opt := option.WithCredentialsFile("path/to/refreshToken.json")
config := &firebase.Config{ProjectID: "my-project-id"}
app, err := firebase.NewApp(context.Background(), config, opt)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

سي #

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.FromFile("path/to/refreshToken.json"),
});

التهيئة بدون معلمات

يمكن أيضًا تهيئة SDK بدون معلمات. في هذه الحالة ، تستخدم SDK بيانات الاعتماد الافتراضية لتطبيق Google . نظرًا لأن البحث عن بيانات الاعتماد الافتراضية مؤتمت بالكامل في بيئات Google ، دون الحاجة إلى توفير متغيرات البيئة أو أي تكوين آخر ، يُوصى بشدة بهذه الطريقة لتهيئة SDK للتطبيقات التي تعمل على Compute Engine و Kubernetes Engine و App Engine و Cloud Functions.

لتحديد خيارات التهيئة اختياريًا للخدمات مثل Realtime Database أو Cloud Storage أو Cloud Functions ، استخدم متغير بيئة FIREBASE_CONFIG . إذا بدأ محتوى المتغير FIREBASE_CONFIG بـ { فسيتم تحليله ككائن JSON. بخلاف ذلك ، تفترض SDK أن السلسلة هي مسار ملف JSON الذي يحتوي على الخيارات.

Node.js

const app = initializeApp();

جافا

FirebaseApp.initializeApp();

بايثون

default_app = firebase_admin.initialize_app()

يذهب

app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

سي #

FirebaseApp.Create();

بمجرد التهيئة ، يمكنك استخدام Admin SDK لإنجاز الأنواع التالية من المهام:

تهيئة تطبيقات متعددة

في معظم الحالات ، ما عليك سوى تهيئة تطبيق افتراضي واحد. يمكنك الوصول إلى الخدمات من هذا التطبيق بطريقتين مكافئتين:

Node.js

// Initialize the default app
const defaultApp = initializeApp(defaultAppConfig);

console.log(defaultApp.name);  // '[DEFAULT]'

// Retrieve services via the defaultApp variable...
let defaultAuth = getAuth(defaultApp);
let defaultDatabase = getDatabase(defaultApp);

// ... or use the equivalent shorthand notation
defaultAuth = getAuth();
defaultDatabase = getDatabase();

جافا

// Initialize the default app
FirebaseApp defaultApp = FirebaseApp.initializeApp(defaultOptions);

System.out.println(defaultApp.getName());  // "[DEFAULT]"

// Retrieve services by passing the defaultApp variable...
FirebaseAuth defaultAuth = FirebaseAuth.getInstance(defaultApp);
FirebaseDatabase defaultDatabase = FirebaseDatabase.getInstance(defaultApp);

// ... or use the equivalent shorthand notation
defaultAuth = FirebaseAuth.getInstance();
defaultDatabase = FirebaseDatabase.getInstance();

بايثون

# Import the Firebase service
from firebase_admin import auth

# Initialize the default app
default_app = firebase_admin.initialize_app(cred)
print(default_app.name)  # "[DEFAULT]"

# Retrieve services via the auth package...
# auth.create_custom_token(...)

يذهب

// Initialize default app
app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

// Access auth service from the default app
client, err := app.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

سي #

// Initialize the default app
var defaultApp = FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
});
Console.WriteLine(defaultApp.Name); // "[DEFAULT]"

// Retrieve services by passing the defaultApp variable...
var defaultAuth = FirebaseAuth.GetAuth(defaultApp);

// ... or use the equivalent shorthand notation
defaultAuth = FirebaseAuth.DefaultInstance;

تتطلب منك بعض حالات الاستخدام إنشاء تطبيقات متعددة في نفس الوقت. على سبيل المثال ، قد ترغب في قراءة البيانات من Realtime Database لأحد مشاريع Firebase وصنع الرموز المميزة المخصصة لمشروع آخر. أو قد ترغب في مصادقة تطبيقين ببيانات اعتماد منفصلة. تتيح لك حزمة Firebase SDK إنشاء تطبيقات متعددة في نفس الوقت ، ولكل منها معلومات التكوين الخاصة بها.

Node.js

// Initialize the default app
initializeApp(defaultAppConfig);

// Initialize another app with a different config
var otherApp = initializeApp(otherAppConfig, 'other');

console.log(getApp().name);  // '[DEFAULT]'
console.log(otherApp.name);     // 'other'

// Use the shorthand notation to retrieve the default app's services
const defaultAuth = getAuth();
const defaultDatabase = getDatabase();

// Use the otherApp variable to retrieve the other app's services
const otherAuth = getAuth(otherApp);
const otherDatabase = getDatabase(otherApp);

جافا

// Initialize the default app
FirebaseApp defaultApp = FirebaseApp.initializeApp(defaultOptions);

// Initialize another app with a different config
FirebaseApp otherApp = FirebaseApp.initializeApp(otherAppConfig, "other");

System.out.println(defaultApp.getName());  // "[DEFAULT]"
System.out.println(otherApp.getName());    // "other"

// Use the shorthand notation to retrieve the default app's services
FirebaseAuth defaultAuth = FirebaseAuth.getInstance();
FirebaseDatabase defaultDatabase = FirebaseDatabase.getInstance();

// Use the otherApp variable to retrieve the other app's services
FirebaseAuth otherAuth = FirebaseAuth.getInstance(otherApp);
FirebaseDatabase otherDatabase = FirebaseDatabase.getInstance(otherApp);

بايثون

# Initialize the default app
default_app = firebase_admin.initialize_app(cred)

#  Initialize another app with a different config
other_app = firebase_admin.initialize_app(cred, name='other')

print(default_app.name)    # "[DEFAULT]"
print(other_app.name)      # "other"

# Retrieve default services via the auth package...
# auth.create_custom_token(...)

# Use the `app` argument to retrieve the other app's services
# auth.create_custom_token(..., app=other_app)

يذهب

// Initialize the default app
defaultApp, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

// Initialize another app with a different config
opt := option.WithCredentialsFile("service-account-other.json")
otherApp, err := firebase.NewApp(context.Background(), nil, opt)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

// Access Auth service from default app
defaultClient, err := defaultApp.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

// Access auth service from other app
otherClient, err := otherApp.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

سي #

// Initialize the default app
var defaultApp = FirebaseApp.Create(defaultOptions);

// Initialize another app with a different config
var otherApp = FirebaseApp.Create(otherAppConfig, "other");

Console.WriteLine(defaultApp.Name); // "[DEFAULT]"
Console.WriteLine(otherApp.Name); // "other"

// Use the shorthand notation to retrieve the default app's services
var defaultAuth = FirebaseAuth.DefaultInstance;

// Use the otherApp variable to retrieve the other app's services
var otherAuth = FirebaseAuth.GetAuth(otherApp);

تعيين نطاقات لقاعدة البيانات الحقيقية والمصادقة

إذا كنت تستخدم Google Compute Engine VM مع بيانات الاعتماد الافتراضية لتطبيق Google لقاعدة البيانات أو المصادقة في الوقت الفعلي ، فتأكد أيضًا من تعيين نطاقات الوصول الصحيحة. بالنسبة إلى قاعدة البيانات والمصادقة في الوقت الفعلي ، تحتاج إلى نطاقات تنتهي بـ userinfo.email وإما cloud-platform أو قاعدة بيانات firebase.database . للتحقق من نطاقات الوصول الحالية وتغييرها ، قم بتشغيل الأوامر التالية باستخدام gcloud .

gcloud

# Check the existing access scopes
gcloud compute instances describe [INSTANCE_NAME] --format json

# The above command returns the service account information. For example:
  "serviceAccounts": [
   {
    "email": "your.gserviceaccount.com",
    "scopes": [
     "https://www.googleapis.com/auth/cloud-platform",
     "https://www.googleapis.com/auth/userinfo.email"
     ]
    }
  ],

# Stop the VM, then run the following command, using the service account
# that gcloud returned when you checked the scopes.

gcloud compute instances set-service-account [INSTANCE_NAME] --service-account "your.gserviceaccount.com" --scopes "https://www.googleapis.com/auth/firebase.database,https://www.googleapis.com/auth/userinfo.email"

الاختبار باستخدام بيانات اعتماد المستخدم النهائي gcloud

عند اختبار Admin SDK محليًا باستخدام بيانات الاعتماد الافتراضية لتطبيق Google التي تم الحصول عليها عن طريق تشغيل gcloud auth application-default login ، يلزم إجراء تغييرات إضافية لاستخدام مصادقة Firebase للأسباب التالية:

  • لا تقبل مصادقة Firebase بيانات اعتماد مستخدم gcloud التي تم إنشاؤها باستخدام معرّف عميل gcloud OAuth.
  • تتطلب مصادقة Firebase توفير معرف المشروع عند التهيئة لهذا النوع من بيانات اعتماد المستخدم النهائي.

كحل بديل ، يمكنك إنشاء بيانات اعتماد افتراضية لتطبيق Google في gcloud باستخدام معرّف عميل OAuth 2.0 الخاص بك. يجب أن يكون معرف عميل OAuth من نوع تطبيق سطح المكتب .

gcloud

gcloud auth application-default login --client-id-file=[/path/to/client/id/file]

يمكنك تحديد معرّف المشروع بشكل صريح عند تهيئة التطبيق أو مجرد استخدام متغير البيئة GOOGLE_CLOUD_PROJECT . هذا الأخير يتجنب الحاجة إلى إجراء أي تغييرات إضافية لاختبار الكود الخاص بك.

لتحديد معرّف المشروع بشكل صريح:

Node.js

import { initializeApp, applicationDefault } from 'firebase-admin/app';

initializeApp({
  credential: applicationDefault(),
  projectId: '<FIREBASE_PROJECT_ID>',
});

جافا

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.getApplicationDefault())
    .setProjectId("<FIREBASE_PROJECT_ID>")
    .build();

FirebaseApp.initializeApp(options);

بايثون

app_options = {'projectId': '<FIREBASE_PROJECT_ID>'}
default_app = firebase_admin.initialize_app(options=app_options)

يذهب

config := &firebase.Config{ProjectID: "<FIREBASE_PROJECT_ID>"}
app, err := firebase.NewApp(context.Background(), config)
if err != nil {
        log.Fatalf("error initializing app: %v\n", err)
}

سي #

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
    ProjectId = "<FIREBASE_PROJECT_ID>",
});

الخطوات التالية

تعرف على Firebase:

أضف ميزات Firebase إلى تطبيقك: