แก้ปัญหาแอปดูดเงินยังไงดี เมื่อคุณเป็นทีมพัฒนาแอปธนาคาร

Akexorcist
4 min readFeb 19, 2023

--

ลองมาสวมบทบาทเป็นทีมพัฒนาแอปธนาคาร แล้วคิดวิธีแก้ปัญหาไปพร้อม ๆ กัน เพื่อทำความเข้าใจว่าทำไมปัญหานี้ถึงซับซ้อนกว่าที่คิด

Photo by Fotis Fotopoulos on Unsplash

ล่าสุดได้ข่าวมาว่าแอปธนาคารโดนบังคับให้เพิ่มฟีเจอร์ที่จะไม่ให้แอปทำงานเมื่อตรวจพบว่ามีแอปอื่นที่เปิดใช้งาน Accessibility อยู่ เพื่อป้องกันปัญหาแอปหลอกดูดเงิน

ภาพตัวอย่างจากแอปธนาคารเจ้าหนึ่ง

และตอนนี้เริ่มเห็นบางแอปบน Android ที่ปล่อยฟีเจอร์นี้ออกมาแล้ว และคงทยอยปล่อยใช้กันจนครบทุกเจ้า อาจจะฟังดูเป็นเรื่องดี แต่ก็มีปัญหาอยู่ไม่น้อยที่ตามมาเช่นกัน

ในบทความนี้จะพูดถึงประเด็นของแอปดูดเงินที่ใช้วิธี Remote Control ผ่าน Accessibility บนแอนดรอยด์เท่านั้น แต่อย่าลืมว่ามิจฉาชีพก็ยังคงมีวิธีที่ใช้ในการหลอกเหยื่ออยู่ดี และวิธีแก้ปัญหาในบทความนี้ไม่ได้ครอบคลุมถึงกรณีเหล่านั้น

ทำไมถึงห้ามใช้ Accessibililty ระหว่างใช้งานแอปธนาคาร?

หลายคนคงทราบข่าวกันแล้วว่าในตอนนี้มีผู้เสียหายจาก “แอปดูดเงิน” ที่จะหลอกเหยื่อว่าเป็นเจ้าหน้าที่จากซักแห่ง (เช่น สรรพากร, พนักงาน Advice เป็นต้น) แล้วส่ง URL เพื่อให้เหยื่อโหลดไฟล์ APK มาติดตั้งลงในเครื่องแล้วทำตามขั้นตอนที่บอกเพื่อเปิดใช้งาน จากนั้นก็จะหลอกเหยื่อว่ากำลังตรวจสอบให้อยู่ แต่จริง ๆ แล้วกำลังเข้าแอปธนาคารในเครื่องเหยื่อเพื่อโอนเงินออกจากบัญชีของเหยื่อ

ซึ่งเราจะไม่พูดกันแล้วว่าทำได้จริงหรือไม่ มันถูกพิสูจน์แล้วว่าสามารถทำได้จริงผ่านขั้นตอนต่าง ๆ ที่ผู้ร้ายใช้หลอกเหยื่ออย่างแนบเนียน จึงทำให้แอปธนาคารตกเป็นเป้าหมายและรับเคราะห์จากผู้เสียหาย เพราะผู้ร้ายสามารถเข้าแอปมาโอนเงินออกไปได้ผ่านแอปปลอมที่มีความสามารถเป็น Remote Control เพื่อควบคุมเครื่องของเหยื่อ

และเบื้องหลังการทำงานของ Remote Control บนแอนดรอยด์ก็คือการใช้เรียกคำสั่งหลาย ๆ คำสั่งที่มีอยู่บนระบบแอนดรอยด์ร่วมกัน และหนึ่งในนั้นก็คือคำสั่งของ Accessibility API ที่สามารถสั่งให้กดหน้าจอแทนผู้ใช้ได้ รวมไปถึงการอ่านเนื้อหาที่แสดงอยู่บนหน้าจอของผู้ใช้ได้

แน่นอนว่าการมีอยู่ของ Accessibility API ก็ไม่ใช่เรื่องผิดแต่อย่างใด เพราะมันเป็นชุดคำสั่งที่ดี ออกแบบมาเพื่ออำนวยความสะดวกให้กับผู้ใช้ในหลาย ๆ ด้านรวมไปถึงผู้พิการด้วยเช่นกัน

“ Accessibility API ก็เหมือนรถยนต์ที่สร้างขึ้นมาเพื่ออำนวยความสะดวกให้กับผู้ใช้ แต่ผิดที่คนร้ายขับรถยนต์เพื่อไล่ชนคน “

แอปที่ใช้ Accessibility ไม่ใช่แอปที่อันตรายเสมอไป

หลายแอปก็มีประโยชน์สำหรับผู้ใช้ ซึ่งนั่นล่ะคือความยากสำหรับทีมพัฒนาแอปที่ไม่มีทางรู้เลยว่าผู้ใช้คนไหนที่ใช้แอปที่เกี่ยวกับ Accessibility บ้าง บางแอปก็เป็นแอปที่นักพัฒนาไม่เคยรู้จักมาก่อน บางแอปก็ติดมากับเครื่องของบางยี่ห้อ ดังนั้นแม้แต่ผมเองก็ไม่สามารถรู้จักมากพอที่จะครอบคลุมกับผู้ใช้ทั้งหมดเช่นกัน

นั่นทำให้ “การบล็อคไม่ให้ใช้งานแอปเมื่อมีแอปอื่นที่ใช้ Accessibility อยู่” จึงไม่ใช่วิธีแก้ปัญหาที่ดีซักเท่าไร เพราะมันจะกระทบกับกลุ่มคนอีกกลุ่มที่ใช้ความสามารถของ Accessibility ผ่านแอปต่าง ๆ ได้รับผลกระทบ และใช้งานแอปธนาคารไม่ได้ด้วย

พออ่านจนถึงจุดนี้ ผมเชื่อว่าหลาย ๆ คนคงมี Solution ในหัวกันประมาณนึง ดังนั้นลองเก็บ Solution ที่ว่าไว้ในใจก่อน แล้วมาดูกันว่าแต่ละประเด็นที่ผมยกขึ้นมานั้น Solution ของคุณจะยังคงใช้ได้อยู่หรือป่าวเนอะ

ดังนั้นก่อนจะอ่านต่อ ให้สมมติว่าผู้อ่านคือทีมพัฒนาแอปธนาคารบน Android และจากนั้นให้ลองคิด Solution เพื่อแก้ปัญหาขึ้นมา แล้วมาดูกันว่า Solution ที่ว่าจะรับมือกับแต่ละประเด็นดังต่อไปนี้หรือไม่

ประเด็นที่ 1 — แอปตัวไหนบ้างที่ใช้ Accessibility?

แน่นอนว่าเราไม่มีทางรู้ทั้งหมดอยู่แล้วว่าแอปตัวไหนบ้างที่ใช้ Accessibility เพราะแค่แอปที่อยู่บน Google Play ในแต่ละวันก็มีแอปใหม่ ๆ ผุดขึ้นมาเกินพันแอป ในขณะเดียวกันแอปที่อยู่บน Google Play ก็อาจจะเพิ่มฟีเจอร์ที่ต้องใช้ความสามารถของ Accessibility ได้

รู้หรือไม่แอปช่วยจำรหัสผ่านอย่าง 1Password หรือแอปด้านความปลอดภัยอย่าง Bitdefender ก็ใช้ความสามารถของ Accessibility ในการทำงานบางอย่าง

แต่ถ้าคุณมีทีมงานที่คอยเช็คแอปเป็นพันล้านแอปใน Google Play ทุก ๆ สัปดาห์ เพื่อเก็บข้อมูลว่าแอปไหนบ้างที่ใช้ Accessibility ก็สามารถทำได้อยู่นะ แต่จะคุ้มแรงทีมงานหรือป่าวก็อีกเรื่องนึง (แน่นอนว่า ไม่คุ้ม)

ประเด็นที่ 2 — เช็คเฉพาะในเครื่องผู้ใช้ว่ามีแอปตัวไหนที่กำลังใช้งาน Accessibility อยู่

โชคดีหน่อยที่ Android มีคำสั่งที่เรียกว่า getEnabledAccessibilityServiceList ให้ใช้ ทำให้แอปธนาคารเช็คได้ว่ามีแอปตัวไหนที่กำลังเปิดใช้งาน Accessibility อยู่ โดยคำสั่งดังกล่าวสามารถเรียกใช้งานได้ทันที ไม่ต้องขออนุญาตผู้ใช้

โดยจะได้เป็นรายชื่อของ Accessibility Service ที่กำลังเปิดใช้งาน/ทำงานอยู่ในขณะนั้น รวมไปถึง Package Name ของแอปด้วย และเมื่อรู้ Package Name ก็ทำให้รู้ว่าเป็นแอปอะไร

การทำงานของ Accessibility บน Android จะอยู่บน Background Service ซึ่งเราจะเรียกแบบเฉพาะเจาะจงว่า Accessibility Service

ยกตัวอย่างเช่น com.google.android.marvin.talkback/.TalkBackService เป็น Accessibility Service ตัวหนึ่งที่เรียกว่า Talkback ของแอป Android Accessibility Suite

เราสามารถเช็ค Package Name เพื่อดูว่าเป็นแอปที่อยู่บน Google Play หรือไม่ ด้วยการใส่ Package Name ใน https://play.google.com/store/apps/details?id=<package_name> แต่ถ้าหาไม่เจอก็แปลว่าแอปนี้ไม่ได้อยู่บน Google Play

ประเด็นที่ 3 — นักพัฒนาแอปสามารถกำหนด Package Name ให้กับแอปได้ตามใจชอบ

สมมติเราบอกว่าแอปที่มี Package Name เป็น com.samsung.accessibility เป็นแอปที่เชื่อถือได้เพราะเป็นแอปเกี่ยวกับ Accessibility ของ Samsung

แต่ในความเป็นจริง นักพัฒนาแอปสามารถกำหนด Package Name ได้ตามใจชอบ ดังนั้นนักพัฒนาแอปคนไหนก็กำหนด com.samsung.accessibility เป็น Package Name ได้เช่นกัน

และการใช้ Package Name ซ้ำกัน จะมีปัญหาก็ต่อเมื่อ

  • ส่งแอปขึ้น Google Play (หรือ Store เจ้าอื่น) เพราะห้ามใช้ Package Name ซ้ำกับที่มีอยู่แล้ว
  • ติดตั้งลงในเครื่องที่มีแอปอื่นที่ใช้ Package Name เดียวกัน

จึงมีโอกาสที่แอปอื่นจะปลอมตัวเป็น com.samsung.accessibility เพื่อติดตั้งบนเครื่องอื่น ๆ ที่ไม่ใช่ของ Samsung ก็เป็นได้ ดังนั้นทางที่ดีไม่ควรเชื่อถือแอปจาก Package Name เด็ดขาด

ประเด็นที่ 4 — แอปที่ใช้ Accessibility ตัวไหนที่ปลอดภัย?

เราอาจจะใช้เงื่อนไขประมาณว่าแอปที่มีอยู่บน Google Play หรือ Android App Store เจ้าอื่น (เช่น Galaxy Store, Huawei AppGallery) ถือว่าเป็นแอปที่ปลอดภัย เพราะผ่านการตรวจสอบจากทีมงานของแต่ละ Store แล้ว

และแอปดูดเงินก็อยู่บน Store เหล่านี้ไม่ได้อยู่แล้ว จึงเป็นที่มาว่าทำไมคนร้ายต้องพยายามหลอกให้ติดตั้งแอปผ่านไฟล์ APK (Sideload) แทน ดังนั้นแอปที่ใช้ Accessibility ทุกตัวที่ไม่ได้ติดตั้งผ่าน Store ให้นับว่าเป็นแอปที่ไม่ปลอดภัย

ภาพไอคอนของแอป Android Accessibility Suite ที่พัฒนาโดยทีม Google เอง

และบน Android ก็มีคำสั่ง getInstallerPackageName กับ getInstallSourceInfo ที่บอกให้รู้ว่าแอปถูกติดตั้งมาจากแอป (App Installer) ใด โดยบอกเป็น Package Name ของแอปตัวนั้น

App Installer คือคำที่ใช้เรียกแอปที่มีหน้าที่ติดตั้งแอปลงในเครื่อง เช่น Google Play หรือ Package Installer ที่ติดมากับเครื่อง เป็นต้น

และถ้าติดตั้งมาจาก com.google.android.packageinstaller ก็แปลว่าแอปถูกติดตั้งผ่านไฟล์ APK ไม่ได้ติดตั้งผ่าน Store

การติดตั้งแอปผ่าน Firebase App Distribution ก็จะถูกมองว่าติดตั้งมาจาก com.google.android.packageinstaller เช่นกัน

ถ้าจะให้ดีก็ควรตรวจสอบ Package Name ของ Package Installer ที่อยู่ในเครื่องแต่ละแบรนด์เพื่อความชัวร์ด้วย โดยเฉพาะแบรนด์ Huawei ในรุ่นที่ไม่มี GMS เพราะอาจจะไม่ใช่ Package Name เดียวกัน

หรือถ้าเป็นแอปบางตัวที่อยู่บน Google Play และมีโอกาสที่คนร้ายจะใช้หลอกเหยื่อได้ อย่างเช่น TeamViewer ก็ให้ดักผ่าน Package Name ของแอปเหล่านั้นแบบเจาะจงไปเลยก็ได้ (อาจจะบล็อคเฉพาะตอนที่แอปเปิดใช้งาน Accessibility อยู่ก็ได้)

ประเด็นที่ 5 — แล้วผู้พิการจะใช้งานแอปธนาคารได้อยู่หรือไม่?

แน่นอนว่าการบล็อคแอปที่ใช้ Accessibility แบบสุ่มสี่สุ่มห้าก็อาจจะกระทบกับผู้พิการที่จำเป็นต้องใช้งานแอปจำพวก Accessibility จริง ๆ ก็ได้ แต่อย่างน้อยเราก็มั่นใจได้ว่าแอปที่พวกเขาใช้เป็นแอปที่ติดมากับเครื่องหรือดาวน์โหลดจาก Store มาติดตั้ง ไม่ได้โหลดไฟล์ APK มาติดตั้งเอง

ดังนั้นการเช็คว่าแอปที่กำลังใช้งาน Accessibility อยู่ และถูกติดตั้งมาจาก App Installer ที่เชื่อถือได้ ก็น่าจะครอบคลุมแอปเหล่านี้ได้ประมาณนึง

ประเด็นที่ 6— จะโดน Reject ตอนส่งแอปขึ้น Google Play มั้ยนะ?

ด้วยความที่ Android และ Google เริ่มให้ความสำคัญในเรื่องของ User Privacy เพิ่มมากขึ้นในหลาย ๆ ปีที่ผ่านมา ซึ่งรวมไปถึงสิ่งที่เรียกว่า Package Visibility โดยส่วนหนึ่งในนั้นจะบอกว่าให้แอปแค่บางประเภทเท่านั้นที่สามารถใช้คำสั่งเช็คแอปที่ติดตั้งอยู่ในเครื่องของผู้ใช้ได้

เนื่องจากเมื่อก่อนเคยมีแอปส่วนหนึ่งที่เช็คแอปภายในเครื่องของผู้ใช้เพื่อเอาไปใช้ประโยชน์โดยไม่ได้รับอนุญาต เช่น วิเคราะห์ Lifestyle ของผู้ใช้ผ่านแอปที่ติดตั้งอยู่ในเครื่อง จะได้แนะนำสินค้าหรือโฆษณาที่เกี่ยวข้องกับแอปเหล่านั้น เป็นต้น จึงทำให้บางคำสั่งจะต้องประกาศ​ Permission ที่ชื่อว่า QUERY_ALL_PACKAGES เสียก่อน ถึงจะใช้งานได้

ตัวอย่างภาพเนื้อหาอีเมลจากทาง Google Play ที่นักพัฒนาแอปบนแอนดรอยด์หวาดกลัวกันมากที่สุด

แน่นอนว่าแอปใด ๆ ก็สามารถประกาศขอ Permission ที่ชื่อว่า QUERY_ALL_PACKAGES แต่เมื่อส่งแอปขึ้น Google Play และตรวจพบว่ามีการเรียกใช้ Permission นี้แบบไม่สมเหตุสมผล ก็จะมีโอกาสโดน Reject ไม่ให้ส่งแอป (เวอร์ชันใหม่) ขึ้น Google Play

แต่คำสั่งที่พูดถึงก่อนหน้านี้ทั้งหมด แอปทุกตัวสามารถเรียกใช้งานได้ ไม่เข้าข่ายที่จะต้องขอ Permission ดังกล่าว

และถ้าจำเป็นต้องขอ Permission จริง ๆ ก็จะต้องยื่นแบบฟอร์มเพื่อชี้แจงกับทาง Google Play ว่าทำไมถึงจำเป็นสำหรับแอปของเรา

ประเด็นที่ 7— ถ้าเกิดเหตุสุดวิสัยมีผู้ใช้ทั่วไปที่เข้าใช้งานแอปไม่ได้ล่ะ

ถึงแม้ว่าเราจะคิด Solution ออกมาดียังไง ก็ไม่ควรมั่นใจ 100% เพราะเราไม่มีทางรู้ว่าผู้ใช้ทุกคนจะใช้งานมือถือเหมือนกับที่เราใช้หรือป่าว รวมไปถึงเครื่องที่ใช้ที่อาจจะให้ผลลัพธ์ที่แตกต่างกัน ถึงแม้ในโค้ดจะใช้คำสั่งเหมือนกันก็ตาม ดังนั้นทางที่ดีเราควรมีทางเลือกสำรองเผื่อไว้ด้วย โดยเน้นไปที่ Information และ Feedback

ยกตัวอย่างเช่น

  • ถ้าตรวจพบแอปที่เข้าข่ายและไม่ให้เข้าใช้งาน ก็ควรชี้แจงผู้ใช้ให้ชัดเจนที่สุด การใช้คำพูดที่กว้างเกินไปหรือคลุมเครือก็จะไม่เกิดประโยชน์อยู่ดี ผู้ใช้อ่านไปก็ไม่เข้าใจ ไม่รู้จะแก้ไขยังไง ทีมพัฒนาจะช่วยวิเคราะห์ปัญหาก็ทำได้ยาก ดังนั้นการบอกไปเลยว่าแอปไหนที่มีปัญหาก็อาจจะดีกว่า (บอกเป็น Package Name ก็ยังดี) ผู้ใช้จะได้รู้และลองแก้ไขปัญหาโดยเบื้องต้น หรือส่งรายละเอียดให้ทีมพัฒนาได้ ส่วนทีมพัฒนาก็จะได้ข้อมูลที่ชัดเจนว่าแอปตัวไหนที่มีปัญหาเพื่อปรับเปลี่ยนเงื่อนไขการตรวจสอบในภายหลังได้
ภาพตัวอย่างการแจ้งปัญหา โดยระบุรายชื่อแอปที่เข้าข่าย เพื่อให้ผู้ใช้สามารถรับรู้และหาทางแก้ไขด้วยตัวเองได้ประมาณหนึ่ง
  • เพิ่ม Tracking Event ใน In-app Analytics สำหรับข้อมูลเกี่ยวกับแอปที่ใช้งาน Accessibility และถูกบล็อคจากแอปธนาคาร เพื่อให้ทีมพัฒนาสามารถเช็คย้อนหลังได้ว่ามีแอปใดที่ทำให้เข้าใช้งานแอปธนาคารของตัวเองไม่ได้ (อาจจะต้องเตรียมตัวชี้แจงประเด็นนี้ให้กับทีม Google Play ด้วย)
  • มีช่องทางในการ Feedback ปัญหาแบบเจาะจงสำหรับกรณีแบบนี้ เช่น เพิ่มหัวข้อสำหรับประเด็นนี้ไว้ในหมวดหมู่ “ปัญหาการเข้าใช้งานแอป” เพื่อให้ผู้ใช้แจ้งปัญหาและสามารถส่งรายละเอียดได้ง่าย เป็นต้น ส่วนจะผ่านขั้นตอนอะไรจนกว่าจะถึงทีมพัฒนาจริง ๆ ก็อีกเรื่องนึง

และอย่าลืมว่าจะต้องสอดคล้องกับ Process และ Policy ของแอปธนาคารแต่ละเจ้าด้วย ดังนั้นถ้าบางธนาคารทำบางอย่างได้ ในขณะที่อีกธนาคารทำไม่ได้ ก็ไม่ใช่เรื่องแปลกใจซักเท่าไร

สรุปว่าเราควรแก้ปัญหากันยังไงดี

ในฐานะที่เป็นทีมพัฒนาแอปธนาคาร (แบบสมมติ) เพื่อป้องกันแอปดูดเงินที่จะเข้าถึงแอปธนาคารจากการใช้ Remote Control ซึ่งเป็นหนึ่งในความสามารถของ Accessibility บน Android จึงทำให้การห้ามไม่ให้ใช้งานแอปเมื่อมีแอปที่เปิดใช้งาน Accessibility อยู่ เป็นวิธีที่ตรงตัวและเด็ดขาดที่สุด

แต่การจะบอกว่าไม่ให้มีแอปที่ใช้งาน Accessibility ซักตัวภายในเครื่องทำงานได้เลยก็คงไม่ใช่วิธีที่ถูกต้องซักเท่าไร เพราะการทำงานของแอปบางตัวที่ปลอดภัยและมีประโยชน์ก็อาจจะใช้ความสามารถของ Accessibility อยู่เบื้องหลังก็ได้เช่นกัน ดังนั้นการบล็อคเฉพาะแอปที่ถูกติดตั้งจากนอก Store จึงสมเหตุสมผลกว่า

  • เช็คว่ามีแอปตัวไหนในเครื่องที่เปิดใช้งาน Accessibility อยู่ และเป็นแอปที่โหลดไฟล์ APK มาติดตั้งเองหรือป่าว เพื่อบล็อคไม่ให้ใช้งานแอปธนาคารของเรา (ควรทำ)
  • เช็คว่ามีแอปตัวไหนในเครื่องที่เปิดใช้งาน Accessibility อยู่ และเป็นแอปที่ติดตั้งจาก Store หรือติดมากับเครื่องตั้งแต่แรก แต่อยู่ใน Blacklist ของทีมพัฒนาแอป เพื่อบล็อคไม่ให้ใช้งานแอปธนาคารของเรา (ไม่จำเป็น)
  • แจ้งให้ผู้ใช้ทราบในกรณีที่เจอแอปที่เข้าข่าย โดยแจ้งชื่อแอปให้ผู้ใช้ทราบด้วย (ไม่จำเป็น แต่เพื่อ UX ที่ดีและลดปัญหาหน้างานให้น้อยลง)

โดย Solution ข้างต้นเป็นแค่เพียง Basic Solution ที่แอปธนาคารควรทำเป็นอย่างน้อย เพื่อให้รองรับกับแต่ละประเด็นที่เกี่ยวข้องกับแอปที่ใช้งาน Accessibility โดยที่ยังคงป้องกันแอปดูดเงินที่ใช้วิธี Remote Control ได้ ถ้าอยากจะเพิ่มวิธีหรือเงื่อนไขอื่น ๆ เพิ่มเข้ามาก็ทำได้ตามใจชอบ แต่อย่าลืมว่าต้องคำนึงถึงผู้ใช้ทั่วไปด้วย (ซึ่งนั่นคือที่มาของ 7 ประเด็นที่หยิบมาพูดถึงในบทความนี้นั่นเอง)

และอย่าลืมว่าบทความนี้ไม่ได้นำเสนอ Perfect Solution เนื่องจากเป็นการมโนด้วยมุมมองของนักพัฒนาแอปบนแอนดรอยด์คนหนึ่งที่ไม่ได้เจอปัญหาหน้างานอย่างทีมพัฒนาของแอปธนาคาร จึงตั้งประเด็นและสมมติฐานเท่าที่นักพัฒนาคนหนึ่งจะนึกออกได้ ถ้าคุณเป็นทีมพัฒนาแอปธนาคารและมองว่า Solution ดังกล่าวยังไม่สมบูรณ์และไม่ครอบคลุมบางกรณี ก็ลองหยิบไปปรับปรุงเพิ่มเติมกันตามใจชอบได้ครับ

ถ้าผู้อ่านคิดว่ามี Solution ที่เป็นไปได้และบทความนี้ไม่ได้พูดถึง หรือมีประเด็นอื่น ๆ ที่อยู่นอกเหนือจากนี้และคิดว่าสำคัญ ก็ลองคอมเม้นมาบอกเล่ากันได้ครับ เดี๋ยวผมจะหยิบมาเติมลงในเนื้อหาของบทความนี้ให้

หรือถ้าเป็นทีมพัฒนาของแอปธนาคารและมีบางอย่างที่ไม่สามารถบอกเล่าผ่านช่องทางสาธารณะได้ ก็สามารถทักมาในช่องทางส่วนตัวบน Facebook ได้เช่นกัน จะช่วยเท่าที่ทำได้ แต่ถ้าช่วยอะไรไม่ได้ก็ต้องขออภัยล่วงหน้าด้วยครับ 🙇‍♂️

--

--

Akexorcist

Lovely android developer who enjoys learning in android technology, habitual article writer about Android development for Android community in Thailand.