ثبت شناسه پاسخ آگهی با Firebase Crashlytics

Firebase Crashlytics یک گزارشگر تصادف سبک و بی‌درنگ است که مدیریت مشکلات پایداری در برنامه‌تان را برای شما آسان می‌کند. Crashlytics با گروه بندی هوشمند خرابی ها و برجسته کردن شرایطی که منجر به آنها می شود، در زمان عیب یابی شما صرفه جویی می کند.

این راهنما نحوه ادغام Crashlytics را در پروژه Xcode خود توضیح می دهد تا بتوانید شناسه های پاسخ آگهی را ثبت کنید. بعداً، وقتی خرابی‌های برنامه خود را عیب‌یابی می‌کنید، می‌توانید شناسه پاسخ آگهی را جستجو کنید و از مرکز بررسی آگهی درAdMobبرای پیدا کردن و مسدود کردن تبلیغات استفاده کنید.

مرحله 1: Firebase را به یک برنامه iOS اضافه کنید

  1. اگر می‌خواهید با Firebase از یک برنامه تمیز وارد شوید، می‌توانید نمونه‌های Google Mobile Ads SDK را برای مخزن iOS در GitHub دانلود یا کلون کنید. این راهنما به طور خاص از مثال بنراستفاده می کند. مثال بنر

    اگر قبلاً یک برنامه دارید، باید بتوانید با شناسه بسته برنامه خود به مراحل دیگر بروید. همین مراحل را می توان برای نمونه های دیگر در مخزن با انطباق های جزئی نیز اعمال کرد.

  2. برای استفاده از Firebase Crashlytics، باید یک پروژه Firebase ایجاد کنید و برنامه خود را به آن اضافه کنید. اگر قبلاً این کار را نکرده اید، یک پروژه Firebase ایجاد کنید. مطمئن شوید که برنامه خود را در آن ثبت کنید .

    1. در صفحه Crashlytics کنسول Firebase، روی Set up Crashlytics کلیک کنید.

    2. در صفحه نمایش داده شده، روی No > Set up a new Firebase app کلیک کنید.

  3. در Podfile، Pods را برای Google Analytics و 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. در ترمینال یا خط فرمان، Pods خود را نصب و به روز کنید:

    pod install --repo-update
    
  5. فایل BannerExample.xcworkspace را برای Xcode باز کنید تا پروژه بارگیری شود.

مرحله 2: Firebase را برای برنامه خود پیکربندی کنید

سریع

در 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
  }
}

هدف-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، Build Settings را باز کنید، روی برگه Build Phases کلیک کنید. اسکریپت اجرای Fabric را اضافه کنید:

پوشه ساخت خود را پاک کنید. سپس، برنامه خود را بسازید و اجرا کنید. اکنون می توانید وارد کنسول وب Firebase شوید و به داشبورد Crashlytics دسترسی پیدا کنید.

(اختیاری): تنظیمات خود را تست کنید

با اضافه کردن یک دکمه خرابی، می‌توانید با فشار دادن هر دکمه، به دلیل ایجاد خرابی برنامه، خرابی را مجبور کنید. این راه‌اندازی آزمایشی کد مرحله 3 را برای ارسال گزارش‌های سفارشی به داشبوردهای Firebase Crashlytic فعال می‌کند.

سریع

در 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")
    }

هدف-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، دکمه Stop را فشار دهید و سپس برنامه را از طریق یک شبیه ساز دوباره راه اندازی کنید. پس از بارگیری برنامه، می توانید روی دکمه Crash کلیک کنید. به Xcode برگردید و روی دکمه Play کلیک کنید تا گزارش خرابی در Crashlytics آپلود شود.

مرحله 3: شناسه پاسخ آگهی را ثبت کنید

اگر چندین آگهی را بارگیری می‌کنید و آنها را در زمان‌های مختلف نشان می‌دهید، ایده خوبی است که هر شناسه پاسخ آگهی را با یک کلید جداگانه ثبت کنید. به عنوان مثال، این راهنما از مثالی استفاده می کند که فقط یک بنر تبلیغاتی دارد. بنابراین، شناسه پاسخ آگهی را به‌عنوان کلید banner_ad_response_id در قطعه زیر ثبت می‌کنیم.

همچنین می‌توانید چندین جفت کلید/مقدار سفارشی در Firebase Crashlytics برای انواع تبلیغات و رویدادهای تبلیغاتی مختلف ایجاد کنید. به اعلان‌های چرخه عمر درخواست آگهی برای مراجعه کنید

برای اطلاعات بیشتر در مورد ثبت سفارشی ، به سفارشی کردن گزارش‌های خرابی Firebase Crashlytics خود مراجعه کنید.

سریع

کد زیر را به ViewController.swift خود اضافه کنید. در اصل، از تابع Crashlytics.setCustomValue() در تابع callback 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")
        }
    }
}

هدف-C

کد زیر را به ViewController.m خود اضافه کنید. در اصل، از تابع setCustomValue [FIRCrashlytics crashlytics] در تابع 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 خود خواهید دید. توجه داشته باشید که برخی از کلیدها ممکن است تا یک ساعت طول بکشد تا در داشبورد شما قابل مشاهده باشند.