تسجيل رقم تعريف استجابة الإعلان باستخدام Firebase Crashlytics

Firebase Crashlytics هي أداة خفيفة وفعّالة لإعداد تقارير الأعطال في الوقت الفعلي، ما يسهّل عليك إدارة مشاكل الثبات في تطبيقك. وتوفّر لك Crashlytics الوقت الذي تستغرِقه في تحديد المشاكل وحلّها من خلال تجميع الأعطال بذكاء وإبراز الظروف التي أدّت إلى حدوثها.

يوضّح هذا الدليل كيفية دمج Crashlytics في مشروع Xcode حتى تتمكّن من تسجيل أرقام تعريف ردود الإعلانات. لاحقًا، عند تحديد وحلّ المشاكل المتعلّقة بالأعطال في تطبيقك، يمكنك البحث عن رقم تعريف استجابة الإعلان واستخدام "مركز مراجعة الإعلانات" في مدير إعلانات Google للعثور على الإعلانات وحظرها.

الخطوة 1: إضافة Firebase إلى تطبيق iOS

  1. إذا أردت تجربة تسجيل الدخول باستخدام Firebase من تطبيق جديد، يمكنك تنزيل أو استنساخ أمثلة حزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة لنظام التشغيل iOS المستودع على GitHub. يستخدم هذا الدليل على وجه التحديد مثال البانر.

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

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

    1. في صفحة Crashlytics ضمن وحدة تحكُّم Firebase، انقر على إعداد Crashlytics.

    2. في الشاشة التي تظهر، انقر على لا > إعداد تطبيق Firebase جديد.

  3. في Podfile، أضِف وحدات Pod لكلّ من "إحصاءات Google" وFirebase Crashlytics.

    source 'https://github.com/CocoaPods/Specs.git'
    
    platform :ios, '8.0'
    
    target 'AdManagerBannerExample' do
      use_frameworks!
      pod 'Google-Mobile-Ads-SDK'
      pod 'Firebase/Crashlytics'
      pod 'Firebase/Analytics'
    end
  4. في Terminal أو موجه الأوامر، ثبِّت مجموعات الإعلانات المتسلسلة وعدِّلها:

    pod install --repo-update
    
  5. افتح ملف AdManagerBannerExample.xcworkspace في IDE Xcode لتحميل المشروع.

الخطوة 2: ضبط Firebase لتطبيقك

Swift

في ملف AppDelegate.swift، أضِف السطور التالية:

import UIKit

// Import the Firebase library
import FirebaseCore

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

  var window: UIWindow?

  func application(_ application: UIApplication,
      didFinishLaunchingWithOptions launchOptions:
          [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Configure an instance of Firebase
    FirebaseApp.configure()
    return true
  }
}

Objective-C

في ملف AppDelegate.m، أضِف السطور التالية:

@import AppDelegate.h;

// Import the Firebase library
@import FirebaseCore;

@interface AppDelegate ()

@end

@implementation AppDelegate(BOOL)application:(UIApplication *)application
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    // Initialize Firebase
    [FIRApp configure];
    return YES;
}

في Xcode، افتح إعدادات الإنشاء، ثم انقر على علامة التبويب مراحل الإنشاء. أضِف النص البرمجي لتشغيل Fabric:

امسح مجلد الإنشاء، ثم أنشئ تطبيقك وشغِّله. يمكنك الآن تسجيل الدخول إلى وحدة تحكّم الويب في Firebase والوصول إلى لوحة بيانات Crashlytics.

(اختياري): اختبار الإعداد

من خلال إضافة زر تعطُّل ، يمكنك فرض تعطُّل التطبيق عند الضغط على الزر. سيؤدي إعداد الاختبار هذا إلى تفعيل الرمز في الخطوة 3 لإرسال السجلات المخصّصة إلى لوحات بيانات Firebase Crashlytics.

Swift

في ملف ViewController.swift، أضِف الأسطر التالية إلى الدالة viewDidLoad():

    override func viewDidLoad() {
        super.viewDidLoad()
        print("Google Mobile Ads SDK version: \(GADRequest.sdkVersion())")
        bannerView.delegate = self
        bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716"
        bannerView.rootViewController = self
        bannerView.load(GADRequest())
        let button = UIButton(type: .roundedRect)
        button.frame = CGRect(x: 20, y: 50, width: 100, height: 30)
        button.setTitle("Crash", for: [])
        button.addTarget(self, action: #selector(self.crashButtonTapped(_:)),
            for: .touchUpInside)
        view.addSubview(button)
    }

بعد ذلك، أضِف الرمز @IBAction إلى أسفل بيان الصف:

    @IBAction func crashButtonTapped(_ sender: AnyObject) {
        fatalError("Test Crash Happened")
    }

Objective-C

في ViewController.m، أضِف الأسطر التالية إلى viewDidLoad الطريقة:

 (void)viewDidLoad {
    [super viewDidLoad];

    /// ...

    UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = CGRectMake(20, 50, 100, 30);
    [button setTitle:@"Crash" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(crashButtonTapped:)
        forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
}

بعد ذلك، أضِف الرمز IBAction إلى أسفل بيان الصف:

 (IBAction)crashButtonTapped:(id)sender {
    assert(NO);
}

في شريط أدوات Xcode، اضغط على الزر إيقاف، ثم أعِد تشغيل التطبيق من خلال محاكي. بعد تحميل التطبيق، يمكنك النقر على الزر تعطُّل. ارجع إلى Xcode وانقر على الزر تشغيل لتحميل سجلّ الأعطال إلى Crashlytics.

الخطوة 3: تسجيل رقم تعريف استجابة الإعلان

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

يمكنك أيضًا إنشاء أزواج مفتاح / قيمة مخصّصة متعددة في Firebase Crashlytics لأنواع الإعلانات وأحداث الإعلانات المختلفة. راجِع رسائل تنبيه دورة حياة طلب الإعلان للاطّلاع على

انتقِل إلى مقالة تخصيص تقارير تعطُّل Firebase Crashlytics لمزيد من المعلومات عن التسجيل المخصّص.

Swift

أضِف الرمز التالي إلى ViewController.swift. في الأساس، تستخدِم الدالة Crashlytics.setCustomValue() في الدالة adViewDidReceiveAd لردّ المكالمات.

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADBannerViewDelegate {

    /// The banner view.
    @IBOutlet weak var bannerView: GADBannerView!

    override func viewDidLoad() {
       super.viewDidLoad()
       ...
       bannerView.delegate = self
       ...
    }

    /// Tells the delegate an ad request loaded an ad.
    func adViewDidReceiveAd(_ bannerView: GADBannerView) {
        if let responseInfo = bannerView.responseInfo,
                responseId = responseInfo.responseId {
            print("adViewDidReceiveAd from network:
                \(responseInfo.adNetworkClassName), response Id='\(responseId)'")
            Crashlytics.sharedInstance().setCustomValue(responseId,
                forKey: "banner_ad_response_id")
        }
    }
}

Objective-C

أضِف الرمز التالي إلى ViewController.m. بشكل أساسي، تستخدِم الدالة [FIRCrashlytics crashlytics] setCustomValue في الدالة adViewDidReceiveAd.

@import GoogleMobileAds;
@interface ViewController ()

@property(nonatomic, strong) GADBannerView *bannerView;

@end

@implementation ViewController(void)viewDidLoad {
  [super viewDidLoad];

  // In this case, we instantiate the banner with desired ad size.
  self.bannerView = [[GADBannerView alloc]
      initWithAdSize:GADAdSizeBanner];

  [self addBannerViewToView:self.bannerView];
} (void)addBannerViewToView:(UIView *)bannerView {
  bannerView.translatesAutoresizingMaskIntoConstraints = NO;
  [self.view addSubview:bannerView];
  [self.view addConstraints:@[
    [NSLayoutConstraint constraintWithItem:bannerView
                               attribute:NSLayoutAttributeBottom
                               relatedBy:NSLayoutRelationEqual
                                  toItem:self.bottomLayoutGuide
                               attribute:NSLayoutAttributeTop
                              multiplier:1
                                constant:0],
    [NSLayoutConstraint constraintWithItem:bannerView
                                 attribute:NSLayoutAttributeCenterX
                                 relatedBy:NSLayoutRelationEqual
                                    toItem:self.view
                                kattribute:NSLayoutAttributeCenterX
                                multiplier:1
                                  constant:0]
                             ]];
}

- (void)adViewDidReceiveAd:(GADBannerView *)bannerView {
  NSString *adResponseId = bannerView.responseInfo.responseId;
  if (adResponseId) {
    NSLog(@"adViewDidReceiveAd from network: %@ with response Id: %@",
        bannerView.responseInfo.adNetworkClassName, adResponseId);
    [[FIRCrashlytics crashlytics] setCustomValue:adResponseId
                                          forKey:@"banner_ad_response_id"];
  }
}

@end

تهانينا! ستظهر لك الآن أحدث adResponseId في قسم المفتاح ضمن جلسات الأعطال في لوحة بيانات Crashlytics. يُرجى العِلم أنّ ظهور بعض المفاتيح في لوحة البيانات قد يستغرق ما يصل إلى ساعة.