التكامل مع جوجل كلاود

تم دمج Cloud Storage for Firebase بشكل محكم مع Google Cloud . تقوم مجموعات Firebase SDK للتخزين السحابي بتخزين الملفات مباشرةً في مجموعات Google Cloud Storage ، ومع نمو تطبيقك، يمكنك بسهولة دمج خدمات Google Cloud الأخرى، مثل الحوسبة المُدارة مثل App Engine أو Cloud Functions، أو واجهات برمجة تطبيقات التعلم الآلي مثل Cloud Vision أو Google. يترجم.

يستخدم Firebase حسابات خدمة Google Cloud لتشغيل الخدمات وإدارتها دون مشاركة بيانات اعتماد المستخدم. عند إنشاء مشروع Firebase يستخدم التخزين السحابي، قد تلاحظ أن حساب الخدمة المقابل متاح بالفعل في مشروعك: service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com . راجع دليل دعم Firebase لمزيد من المعلومات.

تحت الغطاء، تستخدم حزم Firebase SDK للتخزين السحابي المجموعة الافتراضية في طبقة App Engine بدون تكلفة. يتيح لك هذا إمكانية بدء تشغيل Cloud Storage وتشغيله بسرعة، دون الحاجة إلى وضع بطاقة ائتمان أو تمكين حساب Cloud Billing. كما يتيح لك أيضًا مشاركة البيانات بسهولة بين Firebase ومشروع Google Cloud.

يتطلب التكامل مع Google Cloud، بما في ذلك استيراد مجموعات التخزين السحابية الحالية، مشروع Firebase في خطة Blaze. تعرف على المزيد حول الخطط على صفحة التسعير الخاصة بنا.

جوجل التخزين السحابي

يمكنك استخدام Google Cloud Storage APIs للوصول إلى الملفات التي تم تحميلها عبر Firebase SDKs for Cloud Storage، خاصة لتنفيذ عمليات أكثر تعقيدًا، مثل نسخ ملف أو نقله، أو إدراج جميع الملفات المتوفرة في مرجع.

من المهم ملاحظة أن هذه الطلبات تستخدم خيارات التحكم في الوصول إلى Google Cloud Storage، بدلاً من مصادقة Firebase وقواعد أمان التخزين السحابي.

واجهات برمجة التطبيقات

بالإضافة إلى حزم Firebase SDK للتخزين السحابي، هناك عدد من الطرق الأخرى للوصول إلى البيانات المخزنة في مجموعة التخزين السحابي الخاصة بك، اعتمادًا على ما تريد القيام به. إذا كنت تصل إلى البيانات الموجودة على خادم، فإننا نقدم مكتبات من جانب الخادم، بالإضافة إلى واجهة برمجة تطبيقات XML RESTful API المتوافقة مع JSON وS3، أو إذا كنت بحاجة إلى كتابة تغييرات نصية أو تنفيذ مهام إدارية أخرى، فلدينا أداة سطر الأوامر التي سوف يكون في متناول اليدين.

حزم SDK لخادم Google Cloud

توفر Google Cloud حزم SDK عالية الجودة للخوادم لعدد من المنتجات السحابية، بما في ذلك Cloud Storage. تتوفر هذه المكتبات في Node.js و Java و go و Python و PHP و Ruby .

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

يظهر أدناه مثال لاستخدام Google Cloud Storage SDK:

Node.js

    // Require gcloud
    var gcloud = require('google-cloud');

    // Enable Cloud Storage
    var gcs = gcloud.storage({
      projectId: 'grape-spaceship-123',
      keyFilename: '/path/to/keyfile.json'
    });

    // Reference an existing bucket.
    var bucket = gcs.bucket('my-existing-bucket');

    // Upload a local file to a new file to be created in your bucket.
    bucket.upload('/photos/zoo/zebra.jpg', function(err, file) {
      if (!err) {
        // "zebra.jpg" is now in your bucket.
      }
    });

    // Download a file from your bucket.
    bucket.file('giraffe.jpg').download({
      destination: '/photos/zoo/giraffe.jpg'
    }, function(err) {});
    

جافا

    // Enable Cloud Storage
    Storage storage = StorageOptions.builder()
      .authCredentials(AuthCredentials.createForJson(new FileInputStream("/path/to/my/key.json"))
      .build()
      .service();

    // Upload a local file to a new file to be created in your bucket.
    InputStream uploadContent = ...
    BlobId blobId = BlobId.of("my-existing-bucket", "zebra.jpg");
    BlobInfo blobInfo = BlobInfo.builder(blobId).contentType("text/plain").build();
    Blob zebraBlob = storage.create(blobInfo, content);

    // Download a file from your bucket.
    Blob giraffeBlob = storage.get("my-existing-bucket", "giraffe.jpg", null);
    InputStream downloadContent = giraffeBlob.getInputStream();
    

يذهب

    // Enable Cloud Storage
    client, err := storage.NewClient(ctx, option.WithServiceAccountFile("path/to/keyfile.json"))
    if err != nil {
        log.Fatal(err)
    }

    // Download a file from your bucket.
    rc, err := client.Bucket("my-existing-bucket").Object("giraffe.jpg").NewReader(ctx)
    if err != nil {
        log.Fatal(err)
    }
    defer rc.Close()
    body, err := ioutil.ReadAll(rc)
    if err != nil {
        log.Fatal(err)
    }
    

بايثون

    # Import gcloud
    from google.cloud import storage

    # Enable Cloud Storage
    client = storage.Client()

    # Reference an existing bucket.
    bucket = client.get_bucket('my-existing-bucket')

    # Upload a local file to a new file to be created in your bucket.
    zebraBlob = bucket.get_blob('zebra.jpg')
    zebraBlob.upload_from_filename(filename='/photos/zoo/zebra.jpg')

    # Download a file from your bucket.
    giraffeBlob = bucket.get_blob('giraffe.jpg')
    giraffeBlob.download_as_string()
    

بي أتش بي

    // Require gcloud
    require 'vendor/autoload.php';
    use Google\Cloud\Storage\StorageClient;

    // Enable Cloud Storage
    $storage = new StorageClient([
        'projectId' => 'grape-spaceship-123'
    ]);

    // Reference an existing bucket.
    $bucket = $storage->bucket('my-existing-bucket');

    // Upload a file to the bucket.
    $bucket->upload(
        fopen('/photos/zoo/zebra.jpg', 'r')
    );

    // Download a file from your bucket.
    $object = $bucket->object('giraffe.jpg');
    $object->downloadToFile('/photos/zoo/giraffe.jpg');
    

روبي

    # Require gcloud
    require "google/cloud"

    # Enable Cloud Storage
    gcloud = Google::Cloud.new "grape-spaceship-123", "/path/to/keyfile.json"
    storage = gcloud.storage

    # Reference an existing bucket.
    bucket = storage.bucket "my-existing-bucket"

    # Upload a file to the bucket.
    bucket.create_file "/photos/zoo/zebra.jpg", "zebra.jpg"

    # Download a file from your bucket.
    file = bucket.file "giraffe.jpg"
    file.download "/photos/zoo/#{file.name}"
    

واجهة برمجة تطبيقات REST

إذا كنت تستخدم لغة بدون مكتبة عميل، أو تريد أن تفعل شيئًا لا تفعله مكتبات العميل، أو أن يكون لديك عميل HTTP مفضل تفضل استخدامه، فإن Google Cloud Storage يقدم واجهات برمجة التطبيقات لكل من JSON و XML .

بالإضافة إلى واجهات برمجة التطبيقات للوصول إلى بيانات التخزين هذه، لإدارة مجموعات Cloud Storage لاستخدامها في مشاريع Firebase، يمكنك استخدام Cloud Storage for Firebase API .

gsutil

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

  • تحميل وتنزيل وحذف الكائنات.
  • سرد الدلاء والكائنات.
  • نقل الكائنات ونسخها وإعادة تسميتها.
  • تحرير قوائم ACL للكائنات والدلو.

يسمح gsutil بعمليات متقدمة أخرى، مثل نقل الملفات من دليل إلى آخر، أو حذف جميع الملفات الموجودة أسفل موقع معين.

يعد نقل جميع الملفات من مرجع إلى آخر أمرًا سهلاً مثل:

gsutil mv gs://bucket/old/reference gs://bucket/new/reference

يعد الحذف المجمع لجميع الملفات الموجودة أسفل المرجع أمرًا بديهيًا أيضًا:

# Delete all files under a path
gsutil rm -r gs://bucket/reference/to/delete

# Delete all the files in a bucket but not the bucket gsutil rm -r gs://bucket/**

# Delete all the files AND the bucket # Removing the default bucket will break the Firebase SDKs for Cloud Storage and is strongly discouraged gsutil rm -r gs://bucket

أسعار الطلب

Google Cloud Storage عبارة عن خدمة قابلة للتطوير بشكل كبير وتستخدم تقنية التوسع التلقائي لتحقيق معدلات طلب عالية جدًا.

Google Cloud Storage عبارة عن خدمة متعددة المستأجرين، مما يعني أن المستخدمين يتشاركون نفس مجموعة الموارد الأساسية. من أجل تحقيق أقصى استفادة من هذه الموارد المشتركة، تتمتع الدلاء بقدرة إدخال/إخراج أولية.

عندما تخطط لدمج Cloud Storage for Firebase في تطبيقك، فكر في الحد الأدنى لمعدل الطلب الذي يحتاجه تطبيقك للحصول على أداء جيد، وفي تقديم الطلبات بكفاءة. قم بمراجعة الإرشادات حول معدلات الطلب ، وخاصة زيادة معدلات الطلب .

إصدار الكائنات

هل سبق لك أن قمت بحذف شيء ما عن طريق الصدفة ولم يكن لديك نسخة احتياطية؟ يدعم Google Cloud Storage ميزة Object Versioning ، والتي توفر طريقة تلقائية لعمل نسخة احتياطية من بياناتك واستعادتها من تلك النسخ الاحتياطية. يمكنك تمكين تعيين إصدار الكائن باستخدام الأمر gsutil versioning set :

gsutil versioning set on gs://<your-cloud-storage-bucket>

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

إدارة دورة حياة الكائن

تعد القدرة على أرشفة الملفات القديمة أو حذفها تلقائيًا ميزة مفيدة للعديد من التطبيقات. لحسن الحظ، يوفر Google Cloud Storage إدارة دورة حياة الكائنات ، والتي تسمح لك بحذف الكائنات أو أرشفتها بعد فترة زمنية معينة.

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

// lifecycle.json
{
  "lifecycle": {
    "rule":
    [
      {
        "action": {"type": "Delete"},
        "condition": {"age": 1}
      }
    ]
  }
}

ونشره باستخدام الأمر gsutil lifecycle set :

gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>

لاحظ أن هذا ينطبق على جميع الملفات الموجودة في المجموعة، لذلك إذا كنت تقوم بتخزين نسخ احتياطية مهمة للمستخدم تريد تخزينها لفترة طويلة إلى جانب الصور الجانبية التي تريد حذفها يوميًا، فقد ترغب في استخدام مجموعتين منفصلتين أو إجراء عمليات الحذف يدويًا مع gsutil أو الخادم الخاص بك.

محرك التطبيقات

يعد App Engine بمثابة "نظام أساسي كخدمة" يقوم تلقائيًا بقياس منطق الواجهة الخلفية استجابةً لكمية حركة المرور التي يتلقاها. ما عليك سوى تحميل رمز الواجهة الخلفية الخاص بك وستقوم Google بإدارة مدى توفر تطبيقك؛ لا توجد خوادم يمكنك توفيرها أو صيانتها. يعد App Engine طريقة سريعة وسهلة لإضافة قوة معالجة إضافية أو تنفيذ موثوق به إلى تطبيق Firebase الخاص بك.

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

تتضمن بيئات Java وPython وgo القياسية لـ App Engine واجهة برمجة تطبيقات App Engine Images ( Java و Python ، التي يمكنها تغيير حجم الصورة وتدويرها وقلبها واقتصاصها، بالإضافة إلى إرجاع عنوان URL لعرض الصورة الذي يسمح بإجراء تحويلات من جانب العميل ، على غرار Cloudinary وImgix.

عند استيراد مشروع Google Cloud موجود إلى Firebase، إذا كنت تريد إتاحة أي كائنات App Engine موجودة في Firebase، فستحتاج إلى تعيين التحكم الافتراضي في الوصول إلى كائناتك للسماح لـ Firebase بالوصول إليها عن طريق تشغيل الأمر التالي باستخدام gsutil :

gsutil -m acl ch -r -u service-<project number;gt@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://<your-cloud-storage-bucket>

مشاكل معروفة

هناك حالتان معروفتان حيث لا يمكنك استيراد تطبيق App Engine الخاص بك:

  1. يحتوي المشروع على تطبيق App Engine Datastore Master/Slave السابق.
  2. يحتوي المشروع على معرف مشروع ذو مجال مسبوق، على سبيل المثال: domain.com:project-1234 .

في أي من هاتين الحالتين، لن يدعم المشروع Cloud Storage for Firebase، ويجب عليك إنشاء مشروع Firebase جديد لاستخدام Cloud Storage. اتصل بالدعم حتى نتمكن من مساعدتك.

وظائف Google السحابية (تجريبية)

Google Cloud Functions عبارة عن حل حوسبة خفيف الوزن ومعتمد على الأحداث وغير متزامن يسمح لك بإنشاء وظائف صغيرة ذات غرض واحد تستجيب للأحداث دون الحاجة إلى إدارة خادم أو بيئة تشغيل. يمكن استخدام هذه الوظائف لتحويل ترميز الفيديو، أو تصنيف الصور باستخدام التعلم الآلي، أو مزامنة البيانات الوصفية مع قاعدة بيانات Firebase Realtime. مع حمل أقل من App Engine، تعد Cloud Functions أسرع طريقة للتفاعل مع التغييرات في Cloud Storage.

جوجل رؤية السحابية API

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

واجهة برمجة تطبيقات الكلام السحابية من Google

على غرار Vision API، تتيح واجهة Google Cloud Speech API للمطورين استخراج النص من ملف صوتي مخزّن في Cloud Storage. تتعرف واجهة برمجة التطبيقات (API) على أكثر من 80 لغة ومتغيرًا لدعم قاعدة المستخدمين العالمية الخاصة بك. عند دمجها مع Google Cloud Natural Language API ، يمكن للمطورين استخراج النص الأولي واستنتاج المعنى حول هذا النص. وإذا كان هناك حاجة إلى جمهور عالمي، فقم بإقران ذلك بواجهة برمجة تطبيقات الترجمة من Google لترجمة النص إلى أكثر من 90 لغة.