Firebase Crashlytics เป็นเครื่องมือรายงานข้อขัดข้องแบบเรียลไทม์ที่มีขนาดเล็ก ซึ่งช่วยให้คุณจัดการปัญหาด้านความเสถียรในแอปได้อย่างง่ายดาย Crashlytics ช่วยประหยัดเวลาในการแก้ปัญหาด้วยการจัดกลุ่มข้อขัดข้องอย่างชาญฉลาดและไฮไลต์สถานการณ์ที่นำไปสู่ข้อขัดข้องเหล่านั้น
คู่มือนี้อธิบายวิธีผสานรวม Crashlytics เข้ากับโปรเจ็กต์ Android Studio เพื่อให้คุณบันทึกรหัสการตอบกลับของโฆษณาได้ หลังจากนั้น เมื่อคุณแก้ปัญหาข้อขัดข้องในแอป คุณจะค้นหารหัสการตอบกลับของโฆษณาและใช้ศูนย์ตรวจสอบโฆษณาใน AdMob เพื่อค้นหาและบล็อกโฆษณาได้
ขั้นตอนที่ 1: เพิ่ม Firebase ลงในแอปพลิเคชัน Android
หากต้องการลองบันทึกด้วย Firebase จากแอปใหม่ คุณสามารถดาวน์โหลดหรือโคลนGoogle Mobile Ads SDK (Legacy)ตัวอย่างสำหรับที่เก็บ Android ใน GitHub คู่มือนี้ใช้ตัวอย่างแบนเนอร์โดยเฉพาะ
หากมีแอปอยู่แล้ว คุณควรดำเนินการขั้นตอนอื่นๆ ต่อได้ด้วยชื่อแพ็กเกจของแอป นอกจากนี้ คุณยังใช้ขั้นตอนเดียวกันนี้กับตัวอย่างอื่นๆ ในที่เก็บได้โดยปรับเปลี่ยนเล็กน้อย
หากต้องการใช้ Firebase Crashlytics คุณต้องสร้างโปรเจ็กต์ Firebase และเพิ่มแอปของคุณลงในโปรเจ็กต์นั้น สร้างโปรเจ็กต์ Firebase หากยังไม่ได้สร้าง อย่าลืมลงทะเบียนแอปกับโปรเจ็กต์ดังกล่าว
ในหน้า Crashlytics ของคอนโซล Firebase ให้คลิกตั้งค่า Crashlytics
ในหน้าจอที่ปรากฏขึ้น ให้คลิกไม่ > ตั้งค่าแอป Firebase ใหม่

ใน build.gradle ให้เพิ่มทรัพยากร Dependency สำหรับ Google Analytics, Fabric และ 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 Google Mobile Ads SDK (Legacy) implementation 'com.google.android.gms:play-services-ads:25.5.0' // Add the Firebase Crashlytics dependency. implementation 'com.google.firebase:firebase-crashlytics:21.0.1' }
project/build.gradle
buildscript { repositories { // ... // Add Google's Maven repository. google() } dependencies { // ... classpath 'com.google.gms:google-services:4.5.0' // Add the Fabric Crashlytics plugin. classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.8' } } allprojects { // ... repositories { // Check that Google's Maven repository is included (if not, add it). google() // ... } }สร้างและเรียกใช้แอปเพื่อให้แน่ใจว่า Crashlytics ได้รับการกำหนดค่าอย่างถูกต้อง เมื่อดำเนินการสำเร็จ คุณจะเข้าถึงแดชบอร์ด Crashlytics ได้

(ไม่บังคับ): ทดสอบการตั้งค่า
คุณสามารถบังคับให้แอปขัดข้องได้ทุกครั้งที่กดปุ่มโดยเพิ่มปุ่มทำให้แอปขัดข้อง
ต่อไปนี้เป็นตัวอย่างที่แสดงวิธีเพิ่มปุ่มข้อขัดข้องในเมธอด onCreate() ของ Activity
MainActivity (ข้อความที่ตัดตอนมา)
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 AdRequest.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(AdRequest.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)) }
ใน Android Studio ให้สร้างและเรียกใช้แอปในโปรแกรมจำลองหรืออุปกรณ์ที่เชื่อมต่อ หลังจากโหลดแอปแล้ว คุณสามารถคลิกปุ่มข้อขัดข้องได้ เปิดแอปอีกครั้งจากอุปกรณ์หรือ Android Studio เพื่ออัปโหลดบันทึกข้อขัดข้องไปยัง Crashlytics
ขั้นตอนที่ 2: บันทึกรหัสการตอบกลับของโฆษณา
หากคุณโหลดโฆษณาหลายรายการและแสดงในเวลาที่ต่างกัน เราขอแนะนำให้บันทึกรหัสการตอบกลับของโฆษณาแต่ละรายการด้วยคีย์แยกกัน ตัวอย่างเช่น คู่มือนี้ใช้ตัวอย่างที่มีโฆษณาแบนเนอร์เพียงรายการเดียว ดังนั้น เราจึงบันทึกรหัสการตอบกลับของโฆษณาเป็นคีย์ banner_ad_response_id ในข้อมูลโค้ดต่อไปนี้ คุณสามารถสร้างคู่คีย์-ค่าที่กำหนดเองหลายคู่ใน Firebase Crashlytics สำหรับประเภทโฆษณาต่างๆ และเหตุการณ์โฆษณา (ดูAdListenerสำหรับวงจรของโฆษณา) ดูข้อมูลเพิ่มเติมเกี่ยวกับการบันทึกที่กำหนดเองได้ที่ปรับแต่งรายงานข้อขัดข้องของ Firebase Crashlytics
เพิ่มโค้ดต่อไปนี้ลงใน MyActivity.java โดยพื้นฐานแล้ว โค้ดนี้จะใช้ฟังก์ชัน FirebaseCrashlytics.setCustomKey() ในฟังก์ชัน Callback onAdLoaded() เพื่อให้มั่นใจว่าโฆษณาโหลดแล้วก่อนที่จะพยายามเรียกใช้ 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 AdRequest.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(AdRequest.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)) }
ยินดีด้วย ตอนนี้คุณจะเห็น banner_ad_response_id ล่าสุดในส่วนคีย์ของเซสชันข้อขัดข้องบนแดชบอร์ด Crashlytics โปรดทราบว่าคีย์บางรายการอาจใช้เวลาถึง 1 ชั่วโมงจึงจะปรากฏในแดชบอร์ด
