วิธีแก้ปัญหาแอพแอนดรอยด์ที่สร้างจาก React-Native ขออนุญาตใช้ Physical Activity โดยที่ไม่ได้ตั้งใจ
จากที่แอพไทยชนะที่ผู้เชี่ยวชาญด้านไอทีได้ออกมารีวิวว่าแอพไทยชนะได้ขออนุญาตเข้าถึงข้อมูลต่างๆ นาๆ ที่อาจจะทำให้ผู้ใช้เสียความเป็นส่วนตัวและเอาข้อมูลเหล่านั้นไปใช้โดยไม่ได้รับอนุญาตได้ จากการที่ผมเข้าไปแกะแอพไทยชนะดูจริงๆ และดูข้อมูลที่แอพส่งออกมา ก็ไม่มีข้อมูลอะไรที่เกี่ยวกับที่ขออนุญาตเข้าถึงส่งไป นอกจากการเปิดกล้องและตำแหน่งพิกัดที่จะเป็นขอตอนใช้งานเท่านั้น ผมเข้าใจว่าเป็นเพราะแอพมีการเรียกใช้ไลบรารี่ React-Native ต่างๆ มากมายและตอนแอพ Build ก็ได้แอบติดเข้ามาจริงๆ แล้วก็ไม่ได้ใช้หรอ และแอพไทยชนะก็ปิดขออนุญาตเข้าถึงข้อมูลต่างๆ ในเวอร์ชั่นถัดมาอย่างรวดเร็ว ยกเว้นอย่างเดียวที่ยังเห็นเปิดอยู่คือ Physical Activity ที่เอาไว้เข้าถึงข้อมูลการออกกำลังกายต่างๆ เช่น การเดิน ปั่นจักรยาน ดำน้ำ นับก้าว เป็นต้น เป็นที่น่าสงสัยมากว่าแอพไทยชนะจะเอาข้อมูลพวกนี้ไปทำไม ผมได้แต่ด่าโปรแกรมเมอร์ในใจว่า อะไรวะ แค่ Permission แค่นี้ปิดไปได้กระจอก
เวลาผ่านไป ผมจับพลัดจับผลูเข้ามาร่วมทีมพัฒนาแอพไทยชนะเพียงเพราะว่าผมไปรีวิวและแกะแอพไทยชนะซะโล้งโต้ง ทีมพัฒนาเลยเห็นว่าผมเองน่าจะเข้ามาช่วยในการออกแบบและควบคุมคุณภาพแอพได้ ประกอบกับผมเป็นแฮกเกอร์โนเนมฐานะยากจน การที่มีคนจ่ายตังค์จ้างทำอะไรที่ผมทำฟรีๆ เพื่อความสนุกอยู่แล้ว นี่มันวินวินชัดๆ ผมนี่ตอบตกลงโดยไม่ต้องคิดอะไรมากเลย อีกอย่างถ้าแอพมันมีอะไรไม่ชอบมาพากลผมไม่ยอมปล่อยมันผ่านแน่นอน และวันแรกของการทำงาน งานแรกที่ได้รับมอบหมายก็คือรีวิวโค้ดแอพไทยชนะดูว่ามีอะไรน่าสงสัยหรือไม่ดีบ้าง สิ่งที่ผมให้ความสำคัญมากที่สุดก็คือการขอ Physical Activity นี่แหละ เพราะมันกระทบกับความเชื่อมั่นของผู้คนที่จะใช้แอพโดยตรง และถ้าคนไม่ใช้มันก็จะส่งผลเสียต่อการควบคุมโรคระบาดในอนาคตได้
โค้ดอยู่ในมือผม โปรแกรมเมอร์ผู้พัฒนาก็ได้ทำทุกอย่างเท่าที่จะหาเจอจากอินเทอร์เน็ตเพื่อปิดมันแล้ว แต่เจ้ากรรม Physical Activity (ACTIVITY_RECOGNITION) ก็ไม่ยอมหายไป ผมได้เช็คแล้วก็เจอว่ามีอีกหลายๆ แอพในเครื่องผมที่เปิดใช้ Physical Activity ทั้งๆ ที่ไม่น่ามีความจำเป็นต้องใช้มันเลย เช่น Agoda Amazon Hangout Skype Whoscall เป็นต้น
ลองไปหลายทางก็ไม่มีวี่แววว่ามันจะได้ มันต้องเป็นปัญหาที่คนยังคิดหาทางแก้ไม่ได้แน่นอน คำปรามาสทุกคำที่เคยกล่าวเอาไว้มันหลังไหลกระทบตัวเป็นน้ำที่ตกจากเขื่อนคอนกรีต ไม่ว่ายังไงผมจะแก้มันให้ได้ แม้ว่าผมต้องทำสิ่งที่ถูกต้องแต่โปรแกรมเมอร์ทั่วไปละอายที่ทำกัน นั่นก็คือ การอ่านเอกสาร ผมนั่งอ่านเอกสารแอนดรอยด์เกี่ยวกับ Physical Activity แล้วก็เจอว่าตั้งแต่ Android 10 ขึ้นไป เปลี่ยนการขออนุญาต Physical Activity ไปทำตอนรันไทม์จากการขอเอาไว้ก่อน คือตอนเรียกใช้ถึงค่อยเปิดขึ้นมาขอผู้ใช้ ไม่ได้ขอเอาไว้ก่อน คำถามในหัวผมก็คือแล้วแอพที่ Build ด้วย Android SDK รุ่นก่อนหน้าและมาทำงานใน Android 10 ล่ะจะทำยังไง มันยังไม่รู้จักการขอ Physical Activity ตอนรันไทม์นิ คำตอบที่ผมคิดได้ในหัวก็คือก็ขอเอาไว้ก่อนสิ ต้องใช่แน่ๆ เลยไปเชคว่าแอพไทยชนะ Build ด้วย SDK เวอร์ชั่นอะไร พบว่าใช้เวอร์ชั่น 28 ที่ยังไม่ถึง Android 10 ที่เวอร์ชั่น 29 ผมทดลองเปลี่ยนไปใช้ 29 ด้วยการแก้โค้ดแค่ 3 บรรทัดในไฟล์ build.gradle ตามนี้
buildToolsVersion = "29.0.2"
minSdkVersion = 21
compileSdkVersion = 29
targetSdkVersion = 29
ใช้เวลา Build ใหม่ไม่นาน ก็ได้แอพไทยชนะที่ไร้การขอใช้งาน Physical Activity แล้วถึงไม่ค่อยแน่ในว่ามันเป็นเพราะการเปลี่ยนแปลงการทำงานของการขอ Physical Activity หรือเปล่า แต่การเปลี่ยนเวอร์ชั่น SDK ก็ช่วยให้ไม่มีการขอ Physical Activity ไว้ได้จริงๆ
ผมเข้านอนตอนตีสามพร้อมด้วยความภาคภูมิใจในตัวเองไปนอนกอด