Slide 1

Slide 1 text

౵੉য߬੉झ۽ ࢲ࠺झ ಿ૕ ೠ ױ҅ ৢܻӝ ߓ೙઱, Android Engineer, NAVERZ GDG Android Korea

Slide 2

Slide 2 text

উ٘۽੉٘ ѐߊ੗о ঌইঠ ೡ Ѫٜ

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Performance Remote Config A/B Testing Crashlytics

Slide 5

Slide 5 text

Crashlytics ௼ېद ଺ӝ ௼ېद ࣻ੿ Android Studio Memory bugs Stack traces ѐࢶ Crash grouping

Slide 6

Slide 6 text

Crashlytics App Quality Insights Android Studio Click!

Slide 7

Slide 7 text

Crashlytics App Quality Insights

Slide 8

Slide 8 text

Crashlytics App Quality Insights ࢚ࣁ ੿ࠁ ഛੋ

Slide 9

Slide 9 text

Crashlytics App Quality Insights Signals Filtering

Slide 10

Slide 10 text

Crashlytics App Quality Insights Android Studio Hedgehog(Ҋढب஖) Play Store Vitals ݾ۾ب ഛੋ оמ

Slide 11

Slide 11 text

GWP-ASan Crashlytics AndroidManifest.xml Android 11 ੉࢚ https://developer.android.com/ndk/guides/gwp-asan?hl=ko C++ Memory bugs Android Native Memory ࢎਊ Bug ଺ӝ NDK

Slide 12

Slide 12 text

GWP-ASan Crashlytics https://developer.android.com/ndk/guides/gwp-asan?hl=ko C++ Memory bugs

Slide 13

Slide 13 text

GWP-ASan Crashlytics C++ Memory bugs

Slide 14

Slide 14 text

Crashlytics Crash grouping ௏٘ ۄੋ੉ ׳ۄઉب э਷ ਗੋ੄ ௼ېद Ӓܛೝ ࢚ࣁ

Slide 15

Slide 15 text

“জ੉ ו۰ਃ”

Slide 16

Slide 16 text

“য٣о וܽ Ѧө?” “ޖ঺ࠗఠ ഛੋ೧ঠ ೞ૑?”

Slide 17

Slide 17 text

Firebase Performance Monitoring ֎౟ਕ௼ ࣘب? জ द੘ दр? ౠ੿ Ҵо? ٣߄੉झ ࢎন? ӝӝ জ ߡ੹?

Slide 18

Slide 18 text

Firebase Performance Monitoring জ द੘ दр ஏ੿ HTTP ֎౟ਕ௼ ਃ୒ ੗ز ஏ੿ Ҵо, ӝӝ জ ߡ੹ ١ ࣘࢿী ٮۄ ஏ੿ػ ࢿמ ࠙ܨ Custom Trace ࢿמ ঌܿ ࢸ੿

Slide 19

Slide 19 text

पदр ࢿמ ݽפఠ݂ Performance

Slide 20

Slide 20 text

Performance ࢿמ ޙઁܳ ࡅܰѱ ଺Ҋ ೧Ѿ दр ױ୷ೞחؘ ب਑

Slide 21

Slide 21 text

੗ز ஏ੿ Trace 4 1 ࢎਊ੗о জਸ ৈח द੼ (௒٘ झఋ౟) ୐ߣ૩ Activity onResume() ݃૑݄ Activity onStop() Foreground Activity onResume() 3 2 FirebasePerfProvider ContentProvider onCreate() Performance

Slide 22

Slide 22 text

4 1 ࢎਊ੗о জਸ ৈח द੼ (௒٘ झఋ౟) ୐ߣ૩ Activity onResume() ݃૑݄ Activity onStop() Foreground Activity onResume() 3 2 FirebasePerfProvider ContentProvider onCreate() _app_start _app_in_foreground _app_in_background Performance ੗ز ஏ੿ Trace

Slide 23

Slide 23 text

জ द੘ दр ஏ੿җ ҙܻо ೙ਃೠ ੉ਬ? জী ؀ೠ ୐ ੋ࢚ਸ ઝ਋ 30 % 2.4 % ࡈۄ૓ জ द੘ दр Ѩ࢝ ૐо Source: goo.gle/3JCc453 জ द੘ दр ஏ੿

Slide 24

Slide 24 text

_app_start ࢎਊ੗о জਸ ৌযࢲ ୊਺ Activity onResume() ө૑ Performance

Slide 25

Slide 25 text

Performance Trace ࣘࢿ ؘ੉ఠ ೙ఠ݂ ߔ࠙ਤ ࢸ੿ 7ੌр੄ ߸ചਯ

Slide 26

Slide 26 text

Performance Trace ࣘࢿ ؘ੉ఠ ೙ఠ݂ Click!

Slide 27

Slide 27 text

Performance Trace ࣘࢿ ؘ੉ఠ ೙ఠ݂ • জ ߡ੹ • ੉੹ ߡ੹, ୭न ୹द ߡ੹җ ࠺Ү • ӝӝ ߹ • ٣߄੉झ ߹ ࢎনী ٮۄ • Ҵо ߹ • ؘ੉ఠ ߬੉झ ਤ஖о ౠ੿ ૑৉ী ৔ೱਸ ޷஖૑ח ঋח૑

Slide 28

Slide 28 text

Performance Trace ࣘࢿ ؘ੉ఠ ࠺Ү

Slide 29

Slide 29 text

Performance Trace ࣘࢿ ؘ੉ఠ ࠺Ү Click!

Slide 30

Slide 30 text

Performance Trace ࣁ࣌ ࢚ࣁ ࠁӝ Click!

Slide 31

Slide 31 text

Performance Trace ࣁ࣌ ࢚ࣁ ࠁӝ CPU, Memory, Trace ߂ Network Request https://firebase.blog/posts/2018/11/ firebase-performance-monitoring

Slide 32

Slide 32 text

Performance Trace ࣁ࣌ ࢚ࣁ ࠙ࢳೞӝ https://firebase.blog/posts/2018/11/firebase-performance-monitoring Trace ח 2.85ୡ Ѧܿ

Slide 33

Slide 33 text

Performance https://firebase.blog/posts/2018/11/firebase-performance-monitoring On device Network ੉ Traceח ֎౟ਕ௼ ਃ୒җ زੌೞѱ प೯ؽ Trace ࣁ࣌ ࢚ࣁ ࠙ࢳೞӝ

Slide 34

Slide 34 text

Performance Trace ઺ী CPU झ౵੉௼о ߊࢤೣ Trace ࣁ࣌ ࢚ࣁ ࠙ࢳೞӝ CPU https://firebase.blog/posts/2018/11/ firebase-performance-monitoring

Slide 35

Slide 35 text

Performance ݫݽܻо וܻѱ ૐоೞ׮о ׮਺ Trace ੹ ֎౟ਕ௼ ਃ୒ ੉ ՘զ ٸ ૐоೞҊ ੓਺ Memory Trace ࣁ࣌ ࢚ࣁ ࠙ࢳೞӝ https://firebase.blog/posts/2018/11/ firebase-performance-monitoring

Slide 36

Slide 36 text

Performance Memory Trace ࣁ࣌ ࢚ࣁ ࠙ࢳೞӝ ૐоೠ ݫݽܻ ࢎ੉ૉח ֎౟ਕ௼ܳ ా೧ оઉৡ ؘ੉ఠ 2MBী ೧׼ https://firebase.blog/posts/2018/11/ firebase-performance-monitoring

Slide 37

Slide 37 text

Performance https://firebase.blog/posts/2018/11/ firebase-performance-monitoring Trace ࣁ࣌ ࢚ࣁ ࠙ࢳೞӝ ࠙ࢳ Ѿۿ ௾ ੉޷૑ܳ ਃ୒ೡ ٸ ݫݽܻ৬ CPUী ৔ೱਸ ޷஖Ҋ ࢲ࠺झ੄ ੉޷૑ ۽٘ ࣘبо ו۰૑ח Ѿҗ

Slide 38

Slide 38 text

Custom Trace ࢸ੿ೞӝ Performance // Import these Performance Monitoring classes at the top of your `.kt` file import com.google.firebase.perf.FirebasePerformance; import com.google.firebase.perf.metrics.Trace; val myTrace = Firebase.performance.newTrace("startup_trace") myTrace.start() // code that you want to trace myTrace.stop() https://firebase.google.com/docs/perf-mon/custom-code-traces?hl=ko&authuser=0&platform=android UX दաܻয়ী ٮۄ ழझథ ஏ੿ ೦ݾ ߂ ѱ੐ ۨ߰җ э਷ ࢎਊ੗ ࣘࢿ a tt ribute ୶о оמ

Slide 39

Slide 39 text

Custom Trace ࢸ੿ೞӝ Performance https://firebase.google.com/docs/perf-mon/custom-code-traces?hl=ko&authuser=0&platform=android Firebase.performance.newTrace(“startup_trace”).trace { // Update scenario. putAttribute("cache", “true") // Reading scenario. val experimentValue = getAttribute("experiment") // Delete scenario. removeAttribute("experiment") // Read attributes. val traceAttributes = this.attributes } ࢎਊ੗ ࣘࢿ a tt ribute ୶о

Slide 40

Slide 40 text

Custom Trace ࢸ੿ೞӝ Performance ୶оೠ ࣘࢿਵ۽ ؘ੉ఠ ೙ఠ݂ оמ

Slide 41

Slide 41 text

Custom Trace ࢸ੿ೞӝ Performance ѐੋ ध߹ ੿ࠁܳ ನೣೞח ࣘࢿਸ ୶оೞ૑ ݃ࣁਃ ӝӝ ղ ࠺ਯ ઁೠ, ز੸ ࢠ೒݂, ࢲߡ ஏ ࠺ਯ ઁೠী ٮۄ ޖ੘ਤ۽ ࢠ೒݂ ػ чੑפ׮. ࢠ೒ ࣻо ৘࢚җ ׮ܲ ੉ਬח ޖ঺ੋоਃ?

Slide 42

Slide 42 text

ࢿמਸ ѐࢶೞח ߑߨ https://developer.android.com/topic/performance/improving-overview?hl=ko

Slide 43

Slide 43 text

ࢲ࠺झ ߓನܳ ೠ׮ח Ѫ..

Slide 44

Slide 44 text

Feature Flagging জ ߓನ৬ Feature launch ܻ࠙ ࢜ ӝמ ੼૓੸ ߓನ ౠ੿ ਬ੷ Ӓܛীѱ ݢ੷ ߓನ ޙઁ ߊࢤ द জ ੤ߓನ হ੉ ߄۽ ܀ߔ оמ

Slide 45

Slide 45 text

Remote Config new_feature_enabled False 1% users && version >= 2.7.1 True Key-value ह ࢤࢿ Server ӝࠄч In-App ӝࠄч False Override Key Conditional Values

Slide 46

Slide 46 text

Remote Config Crashlytics Analytics पदр(real-time) সؘ੉౟ оמ

Slide 47

Slide 47 text

Feature Flag ࢸ੿ೞӝ Click!

Slide 48

Slide 48 text

Feature Flag ࢸ੿ೞӝ Feature launch ੹ূ ੋজ ӝࠄч ࢎਊ https://firebase.google.com/docs/remote-config/parameters?hl=ko Remote Config

Slide 49

Slide 49 text

Feature Flag ࢸ੿ೞӝ ӝࠄ ч ࢸ੿ https://firebase.google.com/docs/remote-config/parameters?hl=ko Remote Config Feature ߓನ ೡ ٸ ӝࠄ ч ߸҃ ߂ ֢୹ ઑѤ ࢸ੿

Slide 50

Slide 50 text

੉ Feature Flag ܳ ࢎਊೡ ਬ੷ ઑѤ ૑੿

Slide 51

Slide 51 text

remoteConfig = Firebase.remoteConfig remoteConfig.addOnConfigUpdateListener(object : ConfigUpdateListener { override fun onUpdate(configUpdate: ConfigUpdate) { if (configUpdate.updatedKeys.contains("new_feature_enabled")) { remoteConfig.activate().addOnCompleteListener { updateNewFeature() } } } override fun onError(error: FirebaseRemoteConfigException) { . . . } })

Slide 52

Slide 52 text

private fun updateNewFeature() { val newFeatureEnabled = remoteConfig[NEW_FEATURE_ENABLED].asBoolean() if (newFeatureEnabled) { // ࢜۽਍ Feature ௏٘ ୶о binding.fetchButton.setBackgroundColor(Color.RED) } else { // Feature ߓನ ੹ ௏٘ binding.fetchButton.setBackgroundColor(Color.BLUE) } } private const val NEW_FEATURE_ENABLED = "new_feature_enabled"

Slide 53

Slide 53 text

Feature Flag ࢎਊೞӝ Remote Config ࢎਊ੗о জ সؘ੉౟ܳ ׮਍۽٘ೡ ೙ਃ হ੉ জ੄ ز੘җ ݽনਸ ߸҃ Summary

Slide 54

Slide 54 text

A/B Testing জ ߸҃ࢎ೦ী ؀ೠ ࠺ૉפझ ૑಴ب ୓௼ 97% 3% Winner! Button Test A B Remote Config

Slide 55

Slide 55 text

A/B Test Report https://firebase.blog/posts/2023/04/maximize- revenue-with-remote-config-personalization Blog ࢎ۹ ੉޷૑

Slide 56

Slide 56 text

A/B Testing https://firebase.google.com/ docs/ab-testing/video-series? hl=ko A/B Test ߓ਋۞ оӝ

Slide 57

Slide 57 text

Performance Remote Config A/B Testing Crashlytics https://github.com/firebase/quickstart-android Firebase Android Quick Start

Slide 58

Slide 58 text

хࢎ೤פ׮!