[Flutter] 유저에게 앱 권한 요청하고 연락처 가져오기,추가하기

박망키·2022년 8월 11일
1

Flutter 야금야금 먹기

목록 보기
60/97

1. pubspec.yaml에 permission_handler: ^8.3.0 추가

2.main.dart 상단에 import

import 'package:permission_handler/permission_handler.dart';

3-1.안드로이드 세팅

android>gradle.properties에
android.useAndroidX=true
android.enableJetifier=true 없으면 추가하기.

3-2

android>app>build.gradle에

compileSdkVersion 31 로 세팅하기
기존 문자가 있다면 그냥 넘어가기

3-3

android>app>src>main>AndroidManifest.xml에

<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
추가하기

++ CONTACTS가 아닌 CAMERA등을 쓰면 카메라 권한도 된다나..

아이폰용 셋팅

일단 뭐든 아이폰을 위한 것들은 맥북이 있어야한다. 맥북 없으면 셋팅 스킵하면 된다.

  1. 프로젝트 켜놓은 상태에서 터미널을 오픈. (Android Studio는 상단 View - Tool Windows - Terminal)

옛날 맥북의 경우

cd ios
sudo gem install cocoapods

입력

m1 맥북의 경우

cd ios
sudo arch -x86_64 gem install ffi
sudo arch -x86_64 gem install cocoapods
  1. 그럼 ios 폴더에 Podfile이 있는데

(없으면 터미널에 pod init 입력해야함)

거기 최하단에

post_install do |installer| 어쩌구부터 시작하는 부분이 있다.

그 코드 블록은 자신있게 다 지워버리고

post_install do |installer|
 installer.pods_project.targets.each do |target|
   flutter_additional_ios_build_settings(target)
   target.build_configurations.each do |config|
     config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
       '$(inherited)',
       'PERMISSION_CONTACTS=1',
        #추가할거 더 있으면 이 자리에 
     ]
   end
 end
end 

이걸로 교체하면 됨.

https://pub.dev/packages/permission_handler

다른 권한들 예시

'PERMISSION_CAMERA=1',

이렇게 쓰면 카메라 권한

  1. Info.plist 파일을 오픈해서
<key>NSContactsUsageDescription</key>
<string>님 폰의 연락처 권한이 필요합니다 제발 주셈</string> 

이런 코드를 적절해보이는 곳에 자신감있게 추가된다고 한다.

권한달라고 팝업띄울 때 안내문 넣는 부분

그럼 이제 이런 식으로 뜬다고 한다.

다른 권한도 요청하고 있으면 Info.plist 파일에 다른 권한도 추가해야함.

4. 정지하고 다시 Run하기

5.유저에게 사용권한 달라고 요청하는 함수 만들기

getPermission() async {
    //(주의) Android 11버전 이상과 iOS에서는 유저가 한 두번 이상 거절하면 다시는 팝업 띄울 수 없습니다.
    var status = await Permission.contacts.status;
    if (status.isGranted) {//연락처 권한 줬는지 여부
      print('허락됨');
    } else if (status.isDenied) {
      print('거절됨');
      Permission.contacts.request();//허락해달라고 팝업띄우는 코드
    }
    //하지만 아이폰의 경우 OS가 금지하는 경우도 있고 (status.isRestricted)
안드로이드의 경우 아예 앱 설정에서 꺼놓은 경우 (status.isPermanentlyDenied)
그것도 체크하고 싶으면 
    if (status.isPermanentlyDenied) {
       openAppSettings();
     } 
  }

6.권한요청하는 버튼만들어서 함수연결하기


7.허락or거절후 print로 확인하기


*한번 허락하니 그뒤로는 창이 나오질않음

7. 사용자 연락처 가져오는 패키지 추가하기

pubspec.yaml에 contacts_service: ^0.6.3추가

8.상단에 import

import 'package:contacts_service/contacts_service.dart';

9.정지후 다시 Run

10.연락처 가져오는 코드 넣기

 ///모든 연락처 가져오기
   var contacts = await ContactsService.getContacts(); 

10-1. 썸네일제외한 연락처 가져오기

///썸네일제외한 연락처 가져오기
    var contacts = await ContactsService.getContacts(withThumbnails: false);
///첫연락처의 이름 출력
  	print(contacts[0].givenName);

프린트를 확인해 보기위해 주소록에 추가하고 이벤트를 실행해보자

이제 프린트로 저 이름이 나와야 한다

정말 이름만 나오네.
성도 받고싶으면 .familyName으로 확인할수있다.

11.새 연락처 추가하기

 Future addOne(String newValue) async {
    ///새 연락처 추가하기
    Contact newPerson=Contact();
    newPerson.givenName =newValue;
    await ContactsService.addContact(newPerson);

    setState(()  {
      personList.add(newPerson);
    });
  }


minkey를 추가했다.
결과 ->

profile
무럭무럭 자라는 망키

0개의 댓글