Ghi nhật ký mã phản hồi quảng cáo bằng Firebase Crashlytics

Firebase, là một trình báo cáo sự cố theo thời gian thực, nhẹ nhàng, giúp bạn dễ dàng quản lý các vấn đề về độ ổn định trong ứng dụng của mình. Crashlytics giúp bạn tiết kiệm thời gian khắc phục sự cố bằng cách nhóm các sự cố một cách thông minh và làm nổi bật các trường hợp dẫn đến sự cố đó.

Hướng dẫn này mô tả cách tích hợp Crashlytics vào dự án Android Studio để bạn có thể ghi nhật ký mã phản hồi quảng cáo. Sau này, khi khắc phục sự cố trong ứng dụng, bạn có thể tra cứu mã phản hồi quảng cáo và sử dụng Trung tâm xem xét quảng cáo trong Ad Manager để tìm và chặn quảng cáo.

Bước 1: Thêm Firebase vào ứng dụng Android

  1. Nếu muốn thử ghi nhật ký bằng Firebase từ một ứng dụng sạch, bạn có thể tải xuống hoặc sao chép các ví dụ về SDK quảng cáo trên thiết bị di động của Google cho kho lưu trữ Android trên GitHub. Hướng dẫn này sử dụng cụ thể Ví dụ về quảng cáo biểu ngữ.

    Nếu đã có một ứng dụng, bạn có thể tiến hành các bước khác bằng tên gói của ứng dụng đó. Bạn cũng có thể áp dụng các bước tương tự cho các ví dụ khác trong kho lưu trữ có các điều chỉnh nhỏ.

  2. Để sử dụng Firebase Crashlytics, bạn phải tạo một dự án Firebase và thêm ứng dụng của bạn vào dự án đó. Tạo một dự án Firebase (nếu bạn chưa có). Hãy nhớ đăng ký ứng dụng của bạn cho chương trình này.

    1. Trên trang Crashlytics trong bảng điều khiển của Firebase, hãy nhấp vào Thiết lập Crashlytics.

    2. Trên màn hình xuất hiện, hãy nhấp vào Không > Thiết lập ứng dụng Firebase mới.

  3. Trong tệp build.gradle của bạn, hãy thêm các phần phụ thuộc cho Google Analytics, Fabric và Crashlytics.

    app/build.gradle

    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    
    // Add the Fabric plugin
    apply plugin: 'io.fabric'
    
    dependencies {
        // ...
    
        // Add the Google Mobile Ads SDK
        implementation 'com.google.android.gms:play-services-ads:22.4.0'
    
        // Add the Firebase Crashlytics dependency.
        implementation 'com.google.firebase:firebase-crashlytics:18.4.1'
    }
    

    dự án/bản dựng.gradle

    buildscript {
        repositories {
            // ...
            // Add Google's Maven repository.
            google()
        }
    
        dependencies {
            // ...
    
            classpath 'com.google.gms:google-services:4.3.15'
    
            // Add the Fabric Crashlytics plugin.
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9'
        }
    }
    
    allprojects {
        // ...
        repositories {
           // Check that Google's Maven repository is included (if not, add it).
           google()
    
           // ...
        }
    }
    
  4. Tạo và chạy ứng dụng của bạn để đảm bảo Crashlytics được thiết lập chính xác. Sau khi thực hiện thành công, bạn sẽ có thể truy cập vào trang tổng quan Crashlytics.

(Không bắt buộc): Kiểm tra thông tin thiết lập của bạn

Bằng cách Thêm nút sự cố, bạn có thể buộc sự cố gây ra một sự cố ứng dụng sau mỗi lần nhấn nút.

Dưới đây là ví dụ cho thấy cách thêm nút sự cố vào phương thức onCreate() của Activity:

MainActivity (phần trích dẫn)

Java

protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_my);

  // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in
  // values/strings.xml.
  adView = findViewById(R.id.ad_view);

  // Start loading the ad in the background.
  adView.loadAd(new AdManagerAdRequest.Builder().build());

  // Add a crash button.
  Button crashButton = new Button(this);
  crashButton.setText("Crash!");
  crashButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
      throw new RuntimeException("Test Crash"); // Force a crash
    }
  });

  addContentView(crashButton, new ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT,
      ViewGroup.LayoutParams.WRAP_CONTENT));
}

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_my)

  // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in
  // values/strings.xml.
  adView = findViewById(R.id.ad_view)

  // Start loading the ad in the background.
  adView.loadAd(AdManagerAdRequest.Builder().build())

  // Add a crash button.
  val crashButton = Button(this)
  crashButton.text = "Crash!"
  crashButton.setOnClickListener {
    throw RuntimeException("Test Crash") // Force a crash
  }

  addContentView(crashButton, ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT,
      ViewGroup.LayoutParams.WRAP_CONTENT))
}

Trong Android Studio, hãy tạo và chạy ứng dụng của bạn trên một trình mô phỏng hoặc thiết bị được kết nối. Sau khi tải ứng dụng, bạn có thể nhấp vào nút Lỗi. Chạy lại ứng dụng từ thiết bị hoặc Android Studio để tải nhật ký sự cố lên Crashlyics.

Bước 2: Ghi nhật ký mã phản hồi quảng cáo

Nếu tải nhiều quảng cáo và hiển thị các quảng cáo đó vào các thời điểm khác nhau, bạn nên ghi nhật ký từng mã phản hồi quảng cáo bằng một khoá riêng. Ví dụ: hướng dẫn này sử dụng ví dụ chỉ có một quảng cáo biểu ngữ. Do đó, chúng tôi ghi lại mã phản hồi quảng cáo làm khoá banner_ad_response_id trong đoạn mã sau. Bạn thực sự có thể tạo nhiều cặp giá trị / khoá tuỳ chỉnh trong Firebase Crashlytics cho nhiều loại quảng cáo và sự kiện quảng cáo (xem AdListener để biết chu trình hoạt động của quảng cáo). Hãy xem bài viết Tùy chỉnh báo cáo sự cố trong Firebase Crashlytics để biết thêm thông tin về cách ghi nhật ký tùy chỉnh.

Thêm mã sau vào MyActivity.java của bạn. Về cơ bản, mã này sử dụng hàm FirebaseCrashlytics.setCustomKey() trong hàm callback onAdLoaded() để đảm bảo rằng quảng cáo đã tải trước khi cố gắng gọi getResponseInfo().

Java

protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_my);

  // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in
  // values/strings.xml.
  adView = findViewById(R.id.ad_view);

  adView.setAdListener(new AdListener() {
    @Override
    public void onAdLoaded() {
      String adResponseId = adView.getResponseInfo().getResponseId();
      FirebaseCrashlytics.getInstance().setCustomKey(
          "banner_ad_response_id", adResponseId);
    }
  });

  // Start loading the ad in the background.
  adView.loadAd(new AdManagerAdRequest.Builder().build());

  // Add a crash button.
  Button crashButton = new Button(this);
  crashButton.setText("Crash!");
  crashButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
      throw new RuntimeException("Test Crash"); // Force a crash
    }
  });

  addContentView(crashButton, new ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT,
      ViewGroup.LayoutParams.WRAP_CONTENT));
}

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_my)

  // Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in
  // values/strings.xml.
  adView = findViewById(R.id.ad_view)

  adView.adListener = object : AdListener() {
    override fun onAdLoaded() {
      mAdView.responseInfo?.responseId?.let { adResponseId ->
          FirebaseCrashlytics.getInstance().setCustomKey(
              "banner_ad_response_id", adResponseId)
      }
    }
  }

  // Start loading the ad in the background.
  adView.loadAd(AdManagerAdRequest.Builder().build())

  // Add a crash button.
  val crashButton = Button(this)
  crashButton.text = "Crash!"
  crashButton.setOnClickListener {
    throw RuntimeException("Test Crash") // Force a crash
  }

  addContentView(crashButton, ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT,
      ViewGroup.LayoutParams.WRAP_CONTENT))
}

Xin chúc mừng! Bây giờ, bạn sẽ thấy banner_ad_response_id gần đây nhất trong mục khóa của các phiên hoạt động có sự cố trên trang tổng quan Crashlytics. Xin lưu ý rằng có thể mất tới một giờ thì một số khoá mới xuất hiện trên trang tổng quan của bạn.