iOS15写真アプリ連携ユーザ認証周り実装
iOS14以降か未満かで分ける。設定箇所は3つ。
viewDidload
ピッカー表示前
Info.plist
また14以降は全て許可or一部許可でも別れる。本エントリは前者を説明する。
viewDidload
requestAuthorizationで許可を得る
import Photos
...
//写真アクセス許可
if #available(iOS 14, *) {
let accessLebel:PHAccessLevel = .addOnly
PHPhotoLibrary.requestAuthorization(for: accessLebel){status in
DispatchQueue.main.async() {
}
}
}
else {
// Fallback on earlier versions
PHPhotoLibrary.requestAuthorization(){status in
DispatchQueue.main.async() {
}
}
dice.setTitle("D6", for: .normal)
}
ピッカー表示直前
前半:authorizationStatusで許可状況を取得している
後半:前半で取得した許可状況が「不許可」の場合、設定アプリに飛ばしている(「設定アプリで許可状況を変更してね」の意図)
import Photos
...
//ここから前半だよ
var status:PHAuthorizationStatus
if #available(iOS 14, *) {
let accessLebel:PHAccessLevel = .addOnly
status = PHPhotoLibrary.authorizationStatus(for: accessLebel)
} else {
// Fallback on earlier versions
status = PHPhotoLibrary.authorizationStatus()
}
//ここから後半だよ
if (status != .authorized) {
let alert = UIAlertController(title: NSLocalizedString("PhotoAuthAlert_title", comment: ""),
message: NSLocalizedString("PhotoAuthAlert_messsage", comment: ""),
preferredStyle: .alert)
let settingsAction = UIAlertAction(title: NSLocalizedString("PhotoAuthAlert_button_1", comment: ""), style: .default) { (_) -> Void in
guard let settingsURL = URL(string: UIApplication.openSettingsURLString ) else {
return
}
UIApplication.shared.open(settingsURL, options: [:], completionHandler: nil)
}
alert.addAction(settingsAction)
alert.addAction(UIAlertAction(title: NSLocalizedString("PhotoAuthAlert_button_cancel", comment: ""), style: .cancel) { _ in
// ダイアログがキャンセルされた。つまりアクセス許可は得られない。
})
self.present(alert, animated: true, completion: nil)
}
Info.plist
以下を書かないとダイアログ出ない
<key>NSPhotoLibraryAddUsageDescription</key>
<string>use the photo library's photo as a background image in this app</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>use the photo library's photo as a background image in this app</string>
この記事が気に入ったらサポートをしてみませんか?