รู้จัก Firebase Invites ตั้งแต่ Zero จนเป็น Hero

Jirawatee
Firebase Thailand
3 min readSep 29, 2017

--

การบอกต่อเป็นหนึ่งทางช่องทางที่ได้ผลดีในการที่จะให้คนอื่นรู้จักและติดตั้งแอปพลิเคชันของเรา จากการสำรวจของ Google กับคน 8,740 คน พบว่า 52% ของคนที่รู้จักแอป มาจากเพื่อนและครอบครัว

Firebase Invites จะเป็นเครื่องมือที่ช่วยเปลี่ยนผู้ใช้ปัจจุบันของเรา ไปเป็นผู้ที่ช่วยประชาสัมพันธ์แอปของเราให้ผู้อื่นได้อย่างมีประสิทธิภาพ, ง่ายดาย และฟรี ผ่านช่องทางอีเมล และ SMS ซึ่งจุดเด่นของ Firebase Invites คือจะแนะนำ Contact ที่ผู้ใช้คนนั้นๆติดต่อสื่อสารบ่อยๆ โดย Contact ที่จะมาแสดงจะมาจาก Google Contacts และ Contact ที่อยู่ในเครื่องผู้ใช้งาน

วิดีโอแนะนำการทำงานของ Firebase Invites

ลิงค์จาก Firebase Invites สร้างจาก Firebase Dynamic Links ซึ่งจะช่วยให้เรามั่นใจว่าผู้ที่ได้รับลิงค์จะได้รับประสบการณ์ที่ดีที่สุด ลิงค์ที่ได้จะรองรับทั้งคนที่มีและไม่มีแอปในเครื่อง ซึ่งกรณีที่ไม่มีแอป ลิงค์จะสามารถพาผู้ใช้ไปติดตั้งแอปผ่าน App Store หรือ Play Store และหลังจากติดตั้งก็มั่นใจได้ว่าผู้รับจะได้รับ Referral Code หรือเนื้อหาที่แชร์ไป แม้เขาจะเพิ่งทำการติดตั้งแอปก็ตาม

ในการพัฒนา Firebase Invites สำหรับ Android ขอแยกออกเป็น 3 parts ดังนี้

  1. การ Set up Firebase และ Invites SDK
  2. การส่ง Invitations
  3. การรับ Invitations

เมื่อพร้อมแล้ว…ก็เปิด Android Studio ขึ้นมา โดยจะสร้างโปรเจคใหม่ หรือจะใช้โปรเจคเดิมก็ได้

Part 1 การ Set up Firebase และ Invites SDK

ถ้าสร้างโปรเจคใหม่ ให้ไปดูการ Set up Firebase ที่บทความนี้ก่อน

เมื่อ Set up Firebase เรียบร้อยแล้ว ก็ให้เพิ่ม Invites SDK ใน build.gradle ของ app-level แล้วกด Sync ก็เป็นอันจบส่วนที่ 1 ละ

dependencies {
compile 'com.google.firebase:firebase-invites:11.8.0'
}

Part 2 การส่ง Invitations

การสร้าง Invitation Intent เราจะใช้คลาส AppInviteInvitation.IntentBuilder ซึ่งเราสามารถปรับแต่ง Invitation Intent ตาม method ต่างๆได้ดังนี้

  • setMessage (Email & SMS) ตั้งค่าข้อความเริ่มต้น โดยผู้ใช้สามารถแก้ไขข้อความก่อนส่งได้
  • setDeepLink (Email & SMS) ตั้งค่าลิงค์เพื่อให้คนที่กดลิงค์สามารถกลับมาแอปในหน้าเนื้อหาที่เราต้องการ หรือสร้างประสบการณ์ที่เฉพาะเจาะจงเมื่อมีคนคลิกเปิดแอปจากลิงค์
  • setCustomImage ( Email) ตั้งค่า URL ของรูปที่เราจะแนบไปในอีเมลเชิญชวน
  • setCallToActionText (Email) ตั้งค่าข้อความของลิงค์ที่เมื่อกดจะเปิด DeepLink
  • setEmailHtmlContent (Email)
  • setEmailSubject (Email)

จาก method ด้านบน หากต้องการส่งคำเชิญด้วย SMS เราจะใช้แค่ setMessage() และ setDeepLink() เท่านั้น และผู้ส่งจะต้องเป็นผู้จ่ายค่า SMS เอง

ส่ง SMS หรือ Email ก็ได้
ตัวอย่างการส่งคำเชิญผ่าน SMS

จาก method ด้านบน หากต้องการส่ง Invitations Email เราจะแยกออกเป็น 2 แบบ

แบบแรก

เป็นการส่ง Email แบบพื้นฐานซึ่งนอกจาก setMessage() และ setDeepLink() แล้ว เรายังสามารถแนบ URL รูปผ่าน setCustomImage() และ setCallToActionText() เพื่อตั้งข้อความให้กับลิงค์สำหรับเปิด deeplink ได้

แบบที่สอง (แนะนำ)

เป็นการส่ง custom HTML ไปในเนื้อหาของ Email ซึ่งนอกจาก setMessage() และ setDeepLink() แล้ว เราจะกำหนด HTML ผ่าน setEmailHtmlContent() โดยเราจะต้องกำหนดลิงค์ใน HTML เอง ซึ่งจะสามารถกำหนดเนื้อหาในอีเมลได้ดังใจ

<a href=”%%APPINVITE_LINK_PLACEHOLDER%%”>Install</a>

และจะต้องกำหนด setEmailSubject() เพื่อตั้งหัวเรื่องอีเมลด้วยเสมอ

Callback

หลังจากเลือก contact และกดส่งแล้ว เราสามารถดักดู callback ได้ด้วย onActivityResult

ตรงนี้เราก็จะรู้ทันทีว่าเขาส่งผ่านหรือไม่ ถ้าผ่านเราจะได้ invitationId มา แต่ถ้าไม่ผ่าน(อาจเกิดจากผู้ใช้กดยกเลิกเอง) เราก็จะได้แสดงอะไรสักอย่างให้ผู้ใช้ทราบ

3. การรับ Invitations

ก่อนอื่นเราจะต้องประกาศ Activity ปลายทางที่เราต้องการให้รองรับ DeepLink ซะก่อน ซึ่งจากตัวอย่างข้างต้น DeepLink ของเราก็คือ http://example.com/offer/100_baht โดยให้เราไประบุ intent-filter ภายใน Activity ในไฟล์ AndroidManifest.xml และที่สำคัญคือ host จะต้องสอดคล้องกับ DeepLink ซึ่งก็คือ example.com ส่วนค่า path ต่อมาหรือ จะมี query string มากับ deeplink นั้น เราสามารถดึงค่ามาใช้ได้ใน Activity ปลายทาง

AndroidManifest.xml

จากลิงค์ที่ส่งมาใน Email หรือ SMS ตัวอย่าง https://z8mj8.app.goo.gl/i/somecode เมื่อกดเปิดจะถูกแยกออกเป็น 2 กรณี

กรณีที่ผู้ได้รับ Invitation ยังไม่มีแอปในเครื่อง

กรณีนี้ผู้ที่เปิดลิงค์จะถูกไปยัง Google Play หรือ App Store เพื่อดาวโหลดแอป หลังจากติดตั้งแอปเรียบร้อยแล้วเปิดแอปขึ้นมาครั้งแรก ผู้ใช้จะสามารถไปยังหน้าที่ระบุตอนตั้งค่า DeepLink ได้ทันที (ตอนลองครั้งแรก ถึงกับอุทานว่า “ขุ่นพระ”) และเราก็สามารถตรวจสอบได้ว่าเขาติดตั้งแอปผ่านจากลิงค์ของเราหรือไม่ ผ่าน invitationId (เพื่อที่จะให้ค่า referral คนที่แนะนำ, ปลดล๊อค หรือ ให้ค่าพิเศษต่างๆ และอัพเดท db) ตามโค้ดด้านล่าง

MainActivity.class

จากโค้ดด้านบนจะเห็นว่า เราจะ handle ตัว DeepLink เพื่อให้ผู้ใช้ไปหน้าปลายทาง

กรณีที่ผู้ที่ได้รับ Invitation มีแอพในเครื่องแล้ว

กรณีนี้ผู้ที่เปิดลิงค์จะถูกพาไปหน้าปลายทางที่เราระบุไว้ในตอนตั้งค่า DeepLink ทันที เพราะเราได้ตั้งค่า intent-filter ใน AndroidManifest.xml ไว้แล้ว ซึ่งเราก็สามารถให้สิทธิ์พิเศษต่างๆได้ จากเงื่อนไขว่ามี invitationId มา ก็แสดงว่ามาจากลิงค์ที่เพื่อนส่งให้ และยังเป็นการ flag อีกด้วยว่าได้เปิดแอปจากลิงค์ invitation แล้ว ( ถ้าไม่ flag เวลาเปิดแอปมาอีกครั้ง มันจะพามาหน้านี้อีก เพราะ MainActivity เห็นว่ายังไม่ถูก flag ไว้)

DeepLinkActivity.class

สิ่งที่ควรทราบ

  1. เราสามารถตั้งค่าเริ่มต้นของข้อความเชิญชวนได้ แต่อย่างไรก็ตามผู้ใช้ก็ยังสามารถแก้ไขข้อความเชิญชวนก่อนส่งไปได้
  2. setMessage() ตั้งค่าได้ไม่เกิน 100 ตัวอักษร
  3. setCallToActionText() ตั้งค่าได้ไม่เกิน 32 ตัวอักษร
  4. setCustomImage() รูปต้องมีขนาดไม่เกิน 4,000 x 4,000 Pixels
  5. ถ้าเลือกส่ง setEmailHtmlContent() จะต้องมี setEmailSubject() และห้ามระบุ setCustomImage() กับ setCallToActionText() ไม่งั้น Force Close จะมาเยือน

บทสรุป

Word of mouth เป็นช่องทางการแนะนำแอปจากเพื่อนสู่เพื่อน ที่มีประสิทธิภาพสูงสุดจากการสำรวจของ Google ชีวิตเราจะดีแค่ไหน ถ้าเราเลือกใช้ Firebase Invites ในการแนะนำคนที่มี Potential ของผู้ใช้คนนั้นๆ ให้กลายมาเป็นผู้ใช้งานแอปของเราในอนาคต และมอบประสบการณ์ที่ดีที่สุด ถึงแม้ผู้ที่ได้รับ invitations จะยังไม่ได้ลงแอปเราก็ตาม นอกจากนั้นมันก็เหมาะมากๆที่จะทำ campaign ต่างๆ เช่น referral, ส่วนลด, แจกแต้ม หรือ ปลดล๊อค เป็นต้น และขั้นตอนการพัฒนาก็ง่ายและสั้นมาก ผมได้อัพโหลด source code ตัวอย่างไว้ใน GitHub แล้ว

หวังว่าบทความนี้จะช่วยผู้อ่านทุกท่าน Grow your user base กับแอปที่พัฒนาอยู่ได้อย่างมากมาย วันนี้ขอตัวลาไปก่อน แล้วพบกันใหม่บทความหน้า ราตรีสวัสดิ์พี่น้องชาว Firebase

--

--

Jirawatee
Firebase Thailand

Technology Evangelist at LINE Thailand / Google Developer Expert in Firebase