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

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

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

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

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

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

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

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

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

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

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

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

الخطوة الثانية: إعداد 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 run:

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

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

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

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 وانقر على الزر Play (تشغيل) لتحميل سجلّ الأعطال إلى Crashlytics.

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

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

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

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

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. لاحظ أن بعض المفاتيح قد تستغرق ما يصل إلى ساعة لتصبح مرئية في لوحة المعلومات.