안녕하세요.
오늘은 지난 2편에 이어 이 Error 의 종결을 맺는 글을 작성해보도록 하겠습니다.
아직 2편을 보고 오지 않으신 분들은 여기서 먼저 확인해주시기 바랍니다~!!
https://cafe.daum.net/vincentarnold/siqS/205
그럼 시작해보겠습니다!!
에러의 근본적인 원인은 무엇이었을까?
2편에서 시작할 때, 저는 제가 지금 겪고 있는 Error 가 Package 자체에서 문제가 있다고 생각을 하지 못했습니다.
그러나, 2편을 작성한 후, 전체적으로 Package 및 권한 관리를 하던 도중, 결국엔 제가 사용하고 있었던 Package 에 결함이 많다는 사실을 알게 되었습니다.
우선 그 Error 를 일으키는 대표적인 코드부터 한 번 살펴보도록 하겠습니다.
상단의 코드는 MobileNumber 와 SimCard 라는 Package 를 이용했을 때 발생하는 문제입니다.
해당 코드가 사용하는 Package 의 정확한 정보는 다음과 같습니다.
https://pub.dev/packages/simnumber
https://pub.dev/packages/sim_data
https://pub.dev/packages/mobile_number
이 분들입니다..ㅎㅎㅎ
벌써부터 분노 게이지가 쌓이기 시작했습니다만..
그래도 이 Package 를 쓰면 안된다는 교훈을 얻게 되었습니다.
그렇다면 이 문제들은 어떻게 해결해야 할까요??
한 번 확인해보시겠습니다.
잘 돌아가는 Package 사용하기
그 동안 제가 권한 Check 를 위해 사용했던 Package 는 사용하면 안됐던 마치 Pandora 의 상자 같았습니다.
지나가는 A 씨 : 그걸 왜 지금 말해 이 친구야?
나 : 음.. 그러게요. 이걸 좀 더 빨리 알았다면 그냥 이걸 바로 썼을걸 그랬네요..
그래서 그 잘 돌아가는 Package 의 이름은 바로 Permission Handler 입니다.
https://pub.dev/packages/permission_handler
이 Handler 는 대부분의 권한 Check 를 할 수 있고, 심지어 사진 Posting 할 때 필요한 Upload 권한 Check 도 해줍니다.
그렇지만 저는 이 Handler 의 존재를 알고 있었지만, 사용할 수 없었다고 생각했습니다.
왜냐하면 여기 기능에 Phone-Call 이라는 단어가 없길래 전화 권한 Check 기능이 없는줄 알았기 때문입니다.
그렇게 Flutter Open Chatting 방에 질문을 드렸고, 익명의 어떤 분께서 단어 힌트를 알려주셨습니다.
그래서 Permission.phone 이라는 Keyword 를 알게 되었고, 활용하게 됩니다.
AndroidManifest.xml 에 권한 주기
우선 Android > App > Src > Main 밑에 있는 AndroidManifest.xml 파일에 들어갑니다.
그 다음 해당 코드들을 AndroidManifest.xml 파일에 붙여넣도록 합시다.
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<uses-permission android:name="android.permission.CALL_PHONE"/>
각 코드들은 Phone Call 과 관련된 Permission 이며,
첫 번째는 Phone 상태 정보를 읽어오는 Permisson, 두 번째는 Phone Numbers 를 가져오는 Permission,
마지막인 세 번째는 현재 사용 중인 휴대폰으로 전화를 걸 수 있도록 해주는 Permission 입니다.
위 AndroidManifest.xml 에 권한을 주는 과정에 대해서도 설명을 해주는 Blog 도 있으니, 한 번 참고해보시기 바랍니다.
(P.S) SimNumber Package 에서 사용 중인 Code 가 일부 포함되어 있습니다.
READ_PHONE_STATE, READ_PHONE_NUMBERS 를 사용하지 않아도 Code 는 멀쩡히 잘 실행됩니다.
https://ksrapp.tistory.com/7
https://velog.io/@error/Flutter-%EC%95%B1-%EA%B6%8C%ED%99%98-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0
해결방법
Request_Permission Package 로 권한 허용하는 Code 를 Coding Papa 님의 Code 를 참고하여 예제 파일을 작성해보았습니다.
이제 Code 를 확인해 볼 시간입니다.
우선 checkIfPermissionGranted 라는 함수를 만들어 User 에게 전화 걸기 권한을 요청받습니다.
그래서 전화 걸기 권한을 요청받으면 마지막 permitted 에서 true 를 Return 받아 User 로부터 전화를 걸 수 있는 권한을 받게 됩니다.
그 다음, Main Code 에서 checkIfPermissionGranted 함수를 호출하여 permitted 의 값이 True 일 경우, 다음 Page 로 넘어갈 수 있도록 Code 를 구성하였습니다.
즉, 권한을 성공적으로 허락을 받았다면, 그 다음 Page 로 넘어가도록 구성하였습니다.
하단의 Code 주소 및 The Coding Papa 님의 Code 입니다.
https://gist.github.com/GeonwooVincentKim/0180f370a41af185e43fd0edabcc4c6f
https://www.youtube.com/watch?v=HH-8DwrmXT0
오늘은 여기서 마치도록 하겠습니다!!!
지금까지 앱 강제종료 일으키는 Request_Permission 에러 해결 Series 를 봐주셔서 감사합니다~!!!