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

اختيار النظام الأساسي: Android iOS Unity

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

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

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

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

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

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

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

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

  3. في ملف Podfile، أضِف حِزم Pods لكلّ من "إحصاءات 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 أو في موجه الأوامر، ثبِّت حِزم Pods وحدثها:

    pod install --repo-update
    
  5. افتح الملف AdManagerBannerExample.xcworkspace في 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()
        bannerView.delegate = self
        bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716"
        bannerView.rootViewController = self
        bannerView.load(AdManagerRequest())
        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, BannerViewDelegate {

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

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

    /// Tells the delegate an ad request loaded an ad.
    func adViewDidReceiveAd(_ bannerView: AdManagerBannerView) {
        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. يُرجى العِلم أنّ ظهور بعض المفاتيح في لوحة البيانات قد يستغرق ما يصل إلى ساعة.