الدمج مع Google Cloud

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

مشروع Firebase هو في الواقع مشروع Google Cloud تم تفعيل إعدادات وخدمات إضافية خاصة بـ Firebase له. ويعني ذلك أنّه يمكن الوصول إلى كل حزمة Cloud Storage تستخدمها مع Cloud Storage for Firebase في Google Cloud (بما في ذلك وحدة التحكّم وواجهات برمجة التطبيقات).

إنّ الدمج مع Google Cloud، بما في ذلك استيراد حِزم Cloud Storage الحالية، يتطلّب مشروعًا على Firebase في خطة أسعار Blaze المستندة إلى نظام الدفع عند الاستخدام.

اعتبارات لحسابات الخدمة

تستخدِم Firebase Google Cloud حسابات الخدمة لتشغيل الخدمات وإدارتها بدون مشاركة بيانات اعتماد المستخدمين. عند إنشاء مشروع على Firebase يستخدم Cloud Storage، قد تلاحظ أنّ حساب الخدمة المقابل متاحًا في مشروعك: service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com. لمزيد من المعلومات، يُرجى الاطّلاع على نظرة عامة على حسابات خدمة Firebase.

Google Cloud Storage

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

من المهمّ ملاحظة أنّ هذه الطلبات تستخدِم Google Cloud Storage خيارات التحكّم في الوصول، بدلاً من Firebase Authentication وCloud Storage Security Rules.

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

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

Google Cloud حِزم SDK للخادم

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

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

في ما يلي مثال على استخدام حزمة SDK Google Cloud Storage:

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)
    }
    

Python

    # 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()
    

PHP

    // 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');
    

لغة Ruby

    # 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 for Firebase API لإدارة حِزم Cloud Storage لاستخدامها في مشاريع Firebase.

gsutil

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

  • تحميل العناصر وتنزيلها وحذفها
  • سرد مجموعات البيانات والكائنات
  • نقل العناصر ونسخها وإعادة تسميتها
  • تعديل قوائم "الوصول إلى التحكم في الأذونات" للعناصر والحزم

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

Google Cloud Functions (إصدار تجريبي)

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

Google Cloud Vision API

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

Google Cloud Speech API

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

Google App Engine

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

إذا كان لديك حزمة Cloud Storage تلقائية بتنسيق الاسم PROJECT_ID.appspot.com، تتم مشاركتها تلقائيًا مع تطبيق App Engine في مشروعك. وهذا يعني أنّه إذا أنشأت تطبيق App Engine، يمكنك استخدام واجهات برمجة تطبيقات App Engine المضمَّنة لمشاركة البيانات بين تلك الحزمة وApp Engine. ويكون هذا مفيدًا لإجراء ترميز الصوت، وتحويل ترميز الفيديو، وتحويل الصور، بالإضافة إلى عمليات معالجة مكثفة للخلفية.

تشمل البيئات العادية بلغة Java وPython وGo على App Engine واجهة برمجة التطبيقات App Engine Images API (Java | Python | Go)، التي يمكن تغيير حجمها وتدويرها وقلبها واقتصاصها، بالإضافة إلى عرض عنوان URL لعرض الصورة يتيح إجراء عمليات التحويل من جهة العميل، على نحو يشبه Cloudinary وimgix.

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

gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME

اعتبارات متعلقة بملفات Firebase Security Rules وApp Engine

إذا كان لديك حزمة Cloud Storage تلقائية بتنسيق اسم *.appspot.com، يعني ذلك أنّ مشروعك يتضمّن أيضًا تطبيق App Engine يشارك هذه الحزمة.

في حال ضبط Firebase Security Rules على الوصول العلني (غير المُصدَّق عليه)، ستجعل ملفات App Engine التي تم تحميلها حديثًا متاحة للجميع أيضًا.

المشاكل المعروفة في Cloud Storage وApp Engine

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

  1. يتضمّن المشروع تطبيقًا سابقًا من App Engine Datastore للتحكّم في الأجهزة المزوّدة بنظام التشغيل Android.
  2. يحتوي المشروع على رقم تعريف مسبوق بنطاق، على سبيل المثال: domain.com:project-1234.

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