[iOS] アプリのアクセス許可をお洒落にするライブラリSPPermissionsを使ってみた

この記事では、iOSアプリのアクセス許可リクエストをお洒落にすることができる、SPPermissionsというライブラリを使ってみたのでシェアしたいと思います。
2021.04.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

SPPermissionsとは?

  • iOSアプリのアクセス許可のリクエストをお洒落に簡単に実装できるライブラリです。
  • ダイアログ形式とリスト形式のデザインが用意されています。
  • 以下は私がSPPermissionsを使って実装した権限リクエストの動画になります。
ダイアログ形式 リスト形式
    

実装

ここでは、カメラ、通知、マイクの権限をユーザーにリクエストするようなビューをリスト形式で作成します。
権限リクエストボタンを押すとビューが開いてアクセス許可ができるようになっています。

必要環境
iOS 11以上

実装環境
Xcode 12.1
Swift 5.3
iOS 14.1

1. ユーザーにリクエストしたい権限をpodにインストールします

  pod 'SPPermissions/Camera'
  pod 'SPPermissions/Notification'
  pod 'SPPermissions/Microphone'

2. 以下のようにコードを書きます

// ボタンを押すと権限リクエストのビューが表示されるようにします
@IBAction func requestPermission(_ sender: Any) {
        // ダイアログ形式
        //let controller = SPPermissions.dialog([.camera, .notification, .microphone])
        // リスト形式
        let controller = SPPermissions.list([.camera, .notification, .microphone])

        // ビューのタイトルとヘッダー、フッターを編集します
        controller.titleText = "権限のリクエスト"
        controller.headerText = "これらの権限はアプリを正常に使用するのに必要です。"
        controller.footerText = "◯◯App"

        // delegateとdataSourceは不要であれば削除してください
        controller.dataSource = self
        controller.delegate = self

        // このメソッドでビューを表示します
        controller.present(on: self)
    }

3. info.plistにアクセス許可アラートで表示するコメントを書きます。

<key>NSCameraUsageDescription</key>
<string>カメラの権限を許可してください</string>
<key>NSMicrophoneUsageDescription</key>
<string>マイクの権限を許可してください</string>

4.ビューの説明文を変更します。

// ビューの文言を変更する
    func configure(_ cell: SPPermissionTableViewCell, for permission: SPPermission) -> SPPermissionTableViewCell {
        cell.button.allowTitle = "許可"
        cell.button.allowedTitle = "許可済み"
        
        switch permission {
        case .camera:
            cell.permissionTitleLabel.text = "カメラ"
            cell.permissionDescriptionLabel.text = "写真を撮るためにカメラの権限を許可してください"
        case .notification:
            cell.permissionTitleLabel.text = "通知"
            cell.permissionDescriptionLabel.text = "通知を送るために通知の権限を許可してください"
        case .microphone:
            cell.permissionTitleLabel.text = "マイク"
            cell.permissionDescriptionLabel.text = "音声入力をするためにマイクの権限を許可してください"
        default:
            break
        }
        return cell
    }

5. 拒否された場合は設定で許可してもらうようにします

// 拒否された場合は、設定で許可してもらう
    func deniedData(for permission: SPPermission) -> SPPermissionDeniedAlertData? {
        let data = SPPermissionDeniedAlertData()
        data.alertOpenSettingsDeniedPermissionTitle = "必要な権限が拒否されています"
        data.alertOpenSettingsDeniedPermissionDescription = "設定で権限を許可してください"
        data.alertOpenSettingsDeniedPermissionButtonTitle = "設定"
        data.alertOpenSettingsDeniedPermissionCancelTitle = "キャンセル"
        return data
    }

6. 確認

まとめ

  • SPPermissionsを使用して権限のリクエスト画面を作成することで、アプリのユーザーは何の権限を許可しているかが視覚的にわかりやすく安心してアプリを使うことができるようになると思います。
  • 簡単に実装することができるので、複数のアクセス許可をユーザーにリクエストする場合には、SPPermissionsを使用して権限のリクエスト画面を設けてもいいのではと思いました。
  • iOS14.5からIDFAを取得するアプリには実装が義務付けられているApp Tracking Transparencyに関しては、現段階ではSPPermissionsに実装されておらず、ベータ版で確認中のようなので、近い将来、実装されることを期待しています。

参考

https://github.com/ivanvorobei/SPPermissions