การบันทึกรหัสการตอบกลับโฆษณาด้วย 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 ให้คลิก Set up Crashlyticslytics

    2. คลิกไม่ > ตั้งค่าแอป Firebase ใหม่ในหน้าจอที่ปรากฏขึ้น

  3. ใน Podfile ให้เพิ่มพ็อดสำหรับ 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. ติดตั้งและอัปเดตพ็อดในเทอร์มินัลหรือพรอมต์คำสั่ง

    pod install --repo-update
    
  5. เปิดไฟล์ BannerExample.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 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 แล้วคลิกปุ่มเล่นเพื่อให้ระบบอัปโหลดบันทึกข้อขัดข้องไปยัง 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 โปรดทราบว่าบางคีย์อาจใช้เวลาถึง 1 ชั่วโมงจึงจะปรากฏในแดชบอร์ด