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

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

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

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

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

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

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

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

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

  • تأكد من أن خادمك يقوم بتشغيل ما يلي اعتمادًا على SDK للمشرف الذي تستخدمه:

    • Admin Node.js SDK - Node.js 14+ (يوصي Node.js 16+)
      تم إهمال دعم Node.js 14.
    • المشرف Java SDK - Java 8+
    • المشرف Python SDK - Python 3.7+ (يوصي Python 3.8+)
      تم إهمال دعم Python 3.7.
    • Admin Go SDK — اذهب 1.17+
    • Admin .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-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.2.0'
}

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

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

بايثون

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

sudo pip install firebase-admin

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

pip install --user firebase-admin

يذهب

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

# Install the latest version:
go install firebase.google.com/go/v4@latest

# Or install a specific version:
go install firebase.google.com/go/v4@4.13.0

ج #

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

Install-Package FirebaseAdmin -Version 2.4.0

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

dotnet add package FirebaseAdmin --version 2.4.0

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

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

تهيئة SDK

بمجرد إنشاء مشروع Firebase، يمكنك تهيئة SDK باستخدام بيانات اعتماد تطبيق Google الافتراضية . نظرًا لأن البحث عن بيانات الاعتماد الافتراضية يتم تلقائيًا بالكامل في بيئات Google، دون الحاجة إلى توفير متغيرات البيئة أو تكوينات أخرى، يوصى بشدة بهذه الطريقة لتهيئة SDK للتطبيقات التي تعمل في بيئات Google مثل Cloud Run و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 لإنجاز الأنواع التالية من المهام:

استخدام رمز تحديث 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 في البيئات غير التابعة لـ Google

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

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

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

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

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

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

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

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

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

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

لينكس أو ماك

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(),
    ProjectId = "my-project-id",
});

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

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

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;

تتطلب بعض حالات الاستخدام إنشاء تطبيقات متعددة في نفس الوقت. على سبيل المثال، قد ترغب في قراءة البيانات من قاعدة بيانات الوقت الفعلي لمشروع 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 .

com.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 من نوع تطبيق تطبيق سطح المكتب .

com.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 إلى تطبيقك: