Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

أضف 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) ، بدلاً من وصول المسؤول من بيئة مميزة (مثل الخادم) ، فأنت بدلا من ذلك ينبغي اتباع إرشادات حول إعداد العميل جافا سكريبت SDK .

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

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

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

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

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

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

    • Admin Node.js SDK - Node.js 12+
    • المسؤول Java SDK - Java 7+ (أوصي بـ Java 8+)
      تم إيقاف دعم Java 7.
    • Admin Python SDK - Python 3.6+
    • Admin Go SDK - Go 1.11+
    • مسؤول .NET SDK - .NET Framework 4.5+ أو .Net Core 1.5+

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

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

  • مشروع Firebase
  • حساب خدمة للتواصل مع Firebase
  • ملف تكوين ببيانات اعتماد حساب الخدمة الخاص بك

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

أضف SDK

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

Node.js

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

$ npm install firebase-admin --save

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

var admin = require('firebase-admin');

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

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

جافا

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

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

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

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

بايثون

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

$ sudo pip install firebase-admin

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

$ pip install --user firebase-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.2.0

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

$ dotnet add package FirebaseAdmin --version 2.2.0

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

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

تهيئة SDK

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

تدعم مشاريع Firebase جوجل حسابات الخدمة ، والتي يمكنك استخدامها للاتصال 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 المميز

كما يوفر SDK المشرف على الاعتماد الذي يسمح لك لمصادقة مع في 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 ، دون الحاجة إلى توفير متغيرات البيئة أو التهيئة الأخرى ، يُوصى بشدة بهذه الطريقة لتهيئة SDK للتطبيقات التي تعمل على Compute Engine و Kubernetes Engine و App Engine و 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);

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

إذا كنت تستخدم جوجل حساب محرك VM مع تطبيق جوجل افتراضي ثائق التفويض لقاعدة بيانات في الوقت الحقيقي أو مصادقة، تأكد من تعيين أيضا الحق نطاقات الوصول . لقاعدة بيانات في الوقت الحقيقي والتوثيق، تحتاج نطاقات تنتهي في 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

عند اختبار SDK الادارية محليا مع تطبيق جوجل افتراضي ثائق التفويض التي تم الحصول عليها عن طريق تشغيل gcloud auth application-default login ، هناك حاجة لتغييرات إضافية لاستخدام مصادقة Firebase بسبب ما يلي:

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

كحل مؤقت، يمكنك توليد جوجل التطبيق الافتراضي وثائق التفويض في gcloud باستخدام الخاصة بك ID العميل أوث 2.0 . معرف العميل أوث يجب أن يكون نوع سطح المكتب تطبيق التطبيق.

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