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>


 ​


この記事が気に入ったらサポートをしてみませんか?