ปิด/เปิด Crashlytic เมื่อรันใน Debug Mode แบบอัตโนมัติด้วย Gradle
ในการพัฒนา Android แอพ — Crashlytic เป็นเครื่องมือที่ช่วยในการจัดการและแจ้งเตือนเวลาแอพของเราเกิดปัญหา Force close
โดยปกติเมื่อทำการติดตั้ง Crashlytic เข้ากับแอพแล้ว เมื่อมีการ crash เกิดขึ้น Firebases จะแจ้งเตือนทางอีเมล์ทันที โดยคนในทีมก็จะได้รับ อีเมล์นี้เช่นกัน
ทำให้เวลาทดสอบหรือพัฒนาฟีเจอร์ใหม่ๆแล้วเกิด crash ของตัวแอพ Crashlytic ก็จะยังแจ้งเตือน สร้างความผวาและปั่นป่วนในทีมอยู่ไม่น้อย
เพื่อป้องกันไม่ให้เกิดความเข้าใจผิดในกรณีแอพ crash ระหว่างการพัฒนาแอพ และตัว Production บทความนี้จึงจะมาแนะนำการจัดการการแจ้งเตือนนี้กัน
โดย Document ของ Crashlytic ได้บอกวิธีการปิดการแจ้งเตือน โดยสามารถเข้าไปดูได้ที่ link ข้างล่าง
https://firebase.google.com/docs/crashlytics/customize-crash-reports#enable_opt_in_reporting
หลังจากที่เราได้ติดตั้ง Crashlytic เข้ากับโปรเจกของเราแล้ว ทันทีแอพมีปัญหา เราก็จะได้รับอีเมล์จาก Firebase โดย ทีม Firebase ได้เขียนไว้ว่า เราสามารถปิดมันได้ทั้งแบบ Runtime และ Build Process โดยบทความนี้จะเน้นในส่วนของ Build Process เพื่อลดบรรทัดของโค้ดที่เราต้องไปเขียน ในไฟล์ Java/Kotlin
หลังจากที่เราได้ติดตั้ง Crashlytic เข้ากับโปรเจกของเราแล้ว ทันทีแอพมีปัญหา เราก็จะได้รับอีเมล์จาก Firebase โดย ทีม Firebase ได้เขียนไว้ว่า เราสามารถปิดมันได้ทั้งแบบ Runtime และ Build Process โดยบทความนี้จะเน้นในส่วนของ Build Process เพื่อลดบรรทัดของโค้ดที่เราต้องไปเขียน ในไฟล์ Java/Kotlin
ในการแก้ เราก็แค่เพิ่ม
<meta-data android:name=”firebase_crashlytics_collection_enabled” android:value=”false” />
ใน Tag ของ <applicaiton>
เพียงเท่านี้ Crashlytic ก็จะไม่แจ้งเตือน crash อีกต่อไป
แต่ทำให้เกิดภาระ เวลาเราจะ build Production/Release เราก็ต้องมาแก้เป็น true เวลา Debug ก็ต้องแก้เป็น false
การแก้ไปแก้มาเองแบบ manual นี้ อาจจะทำให้เราเผลอลืมแก้ให้เป็นค่าที่ถูกต้องในกรณีที่ต้องเปิดมัน เช่น เผลอปิดไปขณะกำลัง Build ตัว Production ทำให้ crash ที่เกิดขึ้นในการใช้งานจริงก็จะไม่มีการแจ้งเตือน
เพื่อไม่ให้เกิดความผิดพลาดและยุ่งยาก เราสามารถใช้ Gradle ในการควบคุมได้และไม่ต้องมาแก้เองอีกต่อไป เพราะว่า จาก link นี้
ได้บอกไว้ว่าเราสามารถ inject ค่าจาก Gradle ลงไปได้ ตัวอย่างเช่นกำหนดใน Gradle
android {
defaultConfig {
manifestPlaceholders = [hostName:"www.example.com"]
}
...
}
แล้วก็ inject ลง AnroidManifact.xml
<intent-filter ... >
<data android:scheme="http" android:host="${hostName}" ... />
...
</intent-filter>
นั้นหมายความว่าเราสามารถ inject ค่า True หรือ False เพื่อเปิดและปิดแบบอัตโนมัติ
จาก Doc ด้านบน เราก็เปลี่ยนจาก false
เป็น ${triggerCrashlytic}
ตามโค้ดด้านล่าง
<meta-data android:name=”firebase_crashlytics_collection_enabled” android:value=”${triggerCrashlytic}” />
แล้วเราก็ไปเพิ่ม field triggerCrashlytic
ที่ไฟล์ build.gradle ในส่วนของ app module โดยกำหนดในเมื่อ Build แบบ Debug ให้ส่งค่า triggerCrashlytics เป็น false และหากเป็น Release ให้ส่งค่าเป็น True
android {
...
buildTypes {
release {
...
manifestPlaceholders = [triggerCrashlytic: true]
}
debug {
manifestPlaceholders = [triggerCrashlytic: false]
}
}
}
เมื่อแก้เสร็จแล้ว ก็ sync หากไม่มั่นใจก็สามารถทดลองทำให้มัน Crash ดูก็ได้
โดยถ้าเราสั่งรันแอพที่เป็น Debug build เมื่อเกิดการ crash มันก็จะไม่แจ้งเตือนใดๆ
หากเรารันแอพที่เป็น Release build เมื่อมี crash เราก็ได้รับการแจ้งเตือนแน่นอน
ขอให้สนุกกับการ Crash ครับ