Catch up on everthing we announced at this year's Firebase Summit. Learn more

قم بإعداد تنبيهات بناء جديدة داخل التطبيق باستخدام App Distribution SDK

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

قبل ان تبدأ

إذا كنت لم تقم بذلك بالفعل، إضافة إلى Firebase المشروع الذي يعمل بنظام iOS .

الخطوة 1: تمكين التطبيق توزيع تستر API

  1. حدد مشروعك في وحدة التحكم سحابة جوجل .

  2. تحت Firebase التطبيقات API اختبار، انقر فوق تمكين.

خطوة 2: إضافة التطبيقات إلى توزيع التطبيق

استخدم Swift Package Manager لتثبيت وإدارة تبعيات Firebase.

  1. في كسكودي، مع مشروع التطبيق فتح، انتقل إلى ملف> حزم سويفت> إضافة حزمة التبعية.
  2. عند المطالبة ، قم بإضافة مستودع SDK لأنظمة Firebase Apple الأساسية:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. اختر مكتبة توزيع التطبيق.
  5. عند الانتهاء ، سيبدأ Xcode تلقائيًا في حل وتنزيل التبعيات الخاصة بك في الخلفية.

بعد ذلك ، قم بتنفيذ بعض خطوات التكوين:

  1. ترميز جوجل الخاص بك ID التطبيق (مطلوب فقط لإصدارات دائرة الرقابة الداخلية 9 و 10):

    قم بترميز معرف تطبيق Google الخاص بك

    إضافة appdistribution-<encoded-google-app-id> مخطط URL قبل بما في ذلك المقتطف الخاص بك في Info.plist file (يرجى الرجوع إلى وثائق أبل للحصول على تعليمات حول كيفية إضافة مخطط URL في كسكودي):

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>appdistribution-<encoded-google-app-id></string>
            </array>
        </dict>
    </array>
    

    بعد ذلك ، قم بترميز معرف تطبيق Google الخاص بك عن طريق استبدال النقطتين (:) بالشرطات (-). علما بأن جوجل الخاص بك ID التطبيق يقع في حياتك GoogleService-Info.plist الملف. على سبيل المثال ، إذا كان معرف تطبيق Google الخاص بك هو:

    7:77777777777:ios:123456789

    معرف تطبيق Google المشفر الخاص بك هو:

    7-77777777777-ios-123456789
  2. استيراد وحدة Firebase في حياتك UIApplicationDelegate :

    سويفت

    ملاحظة: هذا المنتج غير متوفر على ماك، ماك محفز، tvOS أو أهداف watchOS.

    import Firebase
    

    ج موضوعية

    ملاحظة: هذا المنتج غير متوفر على ماك، ماك محفز، tvOS أو أهداف watchOS.

    @import Firebase;
    
  3. تكوين ل FirebaseApp المشتركة المثال، عادة في التطبيق الخاص بك application:didFinishLaunchingWithOptions: الأسلوب:

    سويفت

    ملاحظة: هذا المنتج غير متوفر على ماك، ماك محفز، tvOS أو أهداف watchOS.

    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    ج موضوعية

    ملاحظة: هذا المنتج غير متوفر على ماك، ماك محفز، tvOS أو أهداف watchOS.

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  4. أخيرًا ، أعد تجميع تطبيقك.

الخطوة 3: تكوين التنبيهات في التطبيق

يوفر App Distribution SDK طريقتين لإعداد تنبيهات بناء داخل التطبيق للمختبرين: تكوين تنبيه أساسي ، والذي يأتي مع حوار تسجيل دخول مُدمج مسبقًا لعرضه على المختبرين ، وتكوين تنبيه متقدم ، مما يسمح لك تخصيص واجهة المستخدم الخاصة بك (UI). نوصي أولاً باستخدام تكوين التنبيه الأساسي إذا كنت جديدًا في تطبيق SDK لتوزيع التطبيقات.

التكوين الأساسي

استخدام checkForUpdate لعرض بنيت قبل تمكين التنبيهات الحوار لاختبار الذي لم تمكن التنبيهات، ومن ثم معرفة ما اذا كان بناء جديد متاح. عندما يتم استدعاؤها ، تقوم الطريقة بتفعيل التسلسل التالي:

  1. للتحقق مما إذا كان أحد المختبرين قد قام بتمكين التنبيهات عن طريق مطالبتهم بتسجيل الدخول إلى App Distribution باستخدام حساب Google الخاص بهم.

  2. إذا لم يقم المُختبِر بتمكين التنبيهات بعد ، فسيتم عرض حوار مُعد مسبقًا.

    تمكين التنبيهات هو عملية لمرة واحدة على جهاز الاختبار وتستمر عبر تحديثات تطبيقك. تبقى التنبيهات تمكين على جهاز اختبار حتى إما يتم إلغاء تثبيت التطبيق، أو حتى signOutTester يسمى الأسلوب. راجع وثائق الأسلوب الذي المرجعية ( سويفت أو الهدف-C ) لمزيد من المعلومات.

  3. يتحقق من الإصدارات المتوفرة حديثًا ليتم تثبيتها من قِبل المُختبِر.

يمكنك تضمين checkForUpdate في أي لحظة في التطبيق الخاص بك. على سبيل المثال، يمكنك مطالبة اختبار لتثبيت يبني المتوفرة حديثا عند بدء التشغيل من قبل بما في ذلك checkForUpdate في viewDidAppear من UIViewController .

يتحقق المثال التالي مما إذا كان المُختبِر قد قام بتمكين التنبيهات أم لا ولديه حق الوصول إلى بنية جديدة ، وإذا كان الأمر كذلك ، يعرض مربع حوار عندما يكون الإصدار متاحًا للتثبيت:

سويفت

ملاحظة: هذا المنتج غير متوفر على ماك، ماك محفز، tvOS أو أهداف watchOS.
AppDistribution.appDistribution().checkForUpdate(completion: { release, error in
  guard let release = release else {
    return
  }

  // Customize your alerts here.
  let title = "New Version Available"
  let message = "Version \(release.displayVersion)(\(release.buildVersion)) is available."
  let uialert = UIAlertController(title: title,message: message, preferredStyle: .alert)

  uialert.addAction(UIAlertAction(title: "Update", style: UIAlertAction.Style.default) {
    _ in
    UIApplication.shared.open(release.downloadURL)
  })
  uialert.addAction(UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel) {
    _ in
  })

  // self should be a UIViewController.
  self.present(uialert, animated: true, completion: nil)
})

ج موضوعية

ملاحظة: هذا المنتج غير متوفر على ماك، ماك محفز، tvOS أو أهداف watchOS.
[[FIRAppDistribution appDistribution]
  checkForUpdateWithCompletion:^(FIRAppDistributionRelease *_Nullable release,
                                 NSError *_Nullable error) {
  if (error) {
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Check For Update"
message:[NSString stringWithFormat:@"Error during tester sign in! %@", error.localizedDescription]
preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {}];

    [alert addAction:okAction];
    [self presentViewController:alert animated:YES completion:nil];

    return;
  }

  if (release) {
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"New Version Available"
message:[NSString stringWithFormat:@"Version %@ (%@) is available.", release.displayVersion,
release.buildVersion] preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction *updateAction = [UIAlertAction actionWithTitle:@"Update"
style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
      [[UIApplication sharedApplication] openURL:release.downloadURL options:@{}
completionHandler:nil];
    }];
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel"
style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {}];
    [alert addAction:updateAction];
    [alert addAction:cancelAction];
    [self presentViewController:alert animated:YES completion:nil];
  }
}];

التكوين المتقدم

الطرق signInTester و isTesterSignedIn تعطيك المزيد من المرونة تخصيص علامة في تجربة اختبار الخاص بك، لذلك يمكن أن تتطابق بشكل أفضل نظرة التطبيق ويشعر.

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

سويفت

ملاحظة: هذا المنتج غير متوفر على ماك، ماك محفز، tvOS أو أهداف watchOS.
// Sign in a tester without automatically checking for update
if (!AppDistribution.appDistribution().isTesterSignedIn) {
  AppDistribution.appDistribution().signInTester (completion: { error in
    // completion block for signInTester
     if (error != nil) {
       // handle failed sign in
      return
     }
    // handle successful sign in
  })
}

// Only check for update if tester is already signed in - do not prompt
if (AppDistribution.appDistribution().isTesterSignedIn) {
  AppDistribution.appDistribution().checkForUpdate(completion: { release, error in
      // completion block for check for update
  })
}

ج موضوعية

ملاحظة: هذا المنتج غير متوفر على ماك، ماك محفز، tvOS أو أهداف watchOS.
// Sign in a tester without automatically checking for update
if(![[FIRAppDistribution appDistribution] isTesterSignedIn]) {
  [[FIRAppDistribution appDistribution]
    signInTesterWithCompletion:^(NSError *_Nullable error) {
      // completion block for signInTester
     if (error) {
       // handle failed sign in
       return;
     }
      // handle successful sign in
  }];
}

// only check for update if tester is already signed in - do not prompt
if([[FIRAppDistribution appDistribution] isTesterSignedIn]) {
  [[FIRAppDistribution appDistribution]
        checkForUpdateWithCompletion:^(FIRAppDistributionRelease *_Nullable release,
                                       NSError *_Nullable error) {
     // completion block for check for update
  }];
}

للحصول على معلومات حول طرق إضافية، بما في ذلك signOutTester ، راجع وثائق مرجعية توزيع التطبيقات ل سويفت و الهدف-C .

الخطوة 4: بناء واختبار التطبيق الخاص بك

وأخيرا، بناء التطبيق واختبار التنفيذ عن طريق توزيع بناء على اختبار باستخدام وحدة تحكم Firebase.

زيارة التطبيقات توزيع دليل استكشاف الأخطاء وإصلاحها للمساعدة في القضايا المشتركة، مثل:

  • لا يتلقى المختبِر تنبيهات داخل التطبيق
  • يُطلب من المختبر تسجيل الدخول إلى Google أكثر من مرة