บันทึกรหัสการตอบสนองของโฆษณาไปยัง Crashlytics

เลือกแพลตฟอร์ม: Android iOS Unity

Firebase Crashlytics เป็นเครื่องมือรายงานข้อขัดข้องแบบเรียลไทม์ที่มีขนาดเล็ก ซึ่งช่วยให้คุณจัดการ ปัญหาด้านความเสถียรในแอปได้อย่างง่ายดาย Crashlytics ช่วยประหยัดเวลาในการแก้ปัญหาด้วยการ จัดกลุ่มข้อขัดข้องอย่างชาญฉลาดและไฮไลต์สถานการณ์ที่นำไปสู่ ข้อขัดข้อง

คู่มือนี้อธิบายวิธีผสานรวม Crashlytics เข้ากับโปรเจ็กต์ Xcode เพื่อให้คุณบันทึกรหัสการตอบสนองโฆษณาได้ จากนั้นเมื่อแก้ปัญหาข้อขัดข้องใน แอป คุณสามารถค้นหารหัสการตอบกลับของโฆษณาและใช้ศูนย์ตรวจสอบโฆษณาใน Ad Manager เพื่อค้นหาและบล็อกโฆษณาได้

ขั้นตอนที่ 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 Analytics และ 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 หรือ Command Prompt ให้ติดตั้งและอัปเดต 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 Crashlytic

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() ฟังก์ชันในฟังก์ชัน Callback 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 โปรดทราบว่าคีย์บางรายการอาจใช้เวลาถึง 1 ชั่วโมงจึงจะปรากฏในแดชบอร์ด