Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- HIG
- Observable
- map
- combine
- swiftUI
- 애니메이션
- swift documentation
- tableView
- rxswift
- uiscrollview
- Human interface guide
- ios
- uitableview
- 스위프트
- ribs
- MVVM
- 클린 코드
- RxCocoa
- Clean Code
- Protocol
- clean architecture
- 리팩토링
- 리펙터링
- UICollectionView
- UITextView
- Refactoring
- 리펙토링
- collectionview
- SWIFT
- Xcode
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 3. Observable로 Wrapping하여 권한 요청) 마이크 권한, ATT(App Tracking Transparency) 권한 본문
iOS 응용 (swift)
[iOS - swift] 3. Observable로 Wrapping하여 권한 요청) 마이크 권한, ATT(App Tracking Transparency) 권한
jake-kim 2022. 1. 6. 00:251. Observable로 Wrapping하여 권한 요청) 위치 권한, 실시간 위치 정보 획득
2. Observable로 Wrapping하여 권한 요청) 사진 권한, 카메라 권한
3. Observable로 Wrapping하여 권한 요청) 마이크 권한, ATT(App Tracking Transparency) 권한
4. Observable로 Wrapping하여 권한 요청) RxSwift의 concat을 이용하여 순서대로 권한 요청 방법
Observable로 wrapping 작업 핵심
- 기존에 Observable 형태를 리턴해주는 작업이면, RxSwift의 생성자 연산자 중에 deferred 연산자 사용하여 wrapping
- 기존에 Observable 형태가 아니고 클로저 형태로 값을 받는 경우, create 연산자 사용
사용 프레임워크
pod 'RxSwift'
pod 'RxCocoa'
마이크 권한 설정
- info.plist에서 설정: Privacy - Microphone Usage Description
- create 연산자를 이용하여 Observable로 wrapping
import RxSwift
import AVFoundation
class MicPermissionManager {
static let shared = MicPermissionManager()
private init() {}
func requestMic() -> Observable<Bool> {
Observable<Bool>.create { observable in
AVAudioSession.sharedInstance().requestRecordPermission { isGranted in
observable.onNext(isGranted)
observable.onCompleted()
}
return Disposables.create()
}
}
}
- 사용하는 쪽
@IBAction func didTapMicPermissionButton(_ sender: Any) {
MicPermissionManager.shared.requestMic()
.bind { print($0) }
.disposed(by: self.disposeBag)
}
ATT 접근 권한
- IDFA, 앱 접근 투명성 ATT(App Tracking Transparency) 관련 개념 글 참고
- info.plist 설정: Privacy - Tracking Usage Description
- create 연산자를 이용하여 Observable로 Wrapping
- 주의: import AppTrackingTransparency
import RxSwift
import AppTrackingTransparency
class ATTPermissionManager {
static let shared = ATTPermissionManager()
private init() {}
func requestATT() -> Observable<ATTrackingManager.AuthorizationStatus> {
Observable<ATTrackingManager.AuthorizationStatus>.create { observable in
ATTrackingManager.requestTrackingAuthorization { status in
observable.onNext(status)
observable.onCompleted()
}
return Disposables.create()
}
}
}
- 사용하는 쪽
@IBAction func didTapATTPermissionButton(_ sender: Any) {
ATTPermissionManager.shared.requestATT()
.bind { print($0) }
.disposed(by: self.disposeBag)
}
* 전체 코드: https://github.com/JK0369/ExMicAttPermission
* 참고
https://developer.apple.com/documentation/avfaudio/avaudiosession/1616601-requestrecordpermission
'iOS 응용 (swift)' 카테고리의 다른 글
Comments