Swift: アプリから写真へのアクセス許可を判定する

アルバムアクセスが実装されているアプリでは、初めてフォトライブラリへの保存や読み込みを行う場合、アクセスの許可を求めるダイアログが表示されます。
このときユーザーがアクセスを許可する・しないを選択したにも関わらず、次回のアクセスからこのダイアログは表示されなくなります。

フォトライブラリへアクセスすることを前提でつくられたアプリの場合、初回のダイアログで「許可しない」を選択したユーザーに対して、次回も再度アクセスを促す必要があります。

今回はそういったときに使える ユーザーが写真へのアクセスを許可したかどうかを判定する方法 を説明したいと思います。

アプリから写真へのアクセス許可を判定する

フレームワークのインポート

Xcode の Project > General > Linked Frameworks and Libraries より AssetsLibrary.framework をインポートします。

swift-album-access-detect1

アクセス許可を判定する

クラスファイルに上記の AssetFramework をインポートし、アルバムアクセスを判定したい任意のタイミングで ALAuthorizationStatus により判定を行います。

var status: ALAuthorizationStatus = ALAssetsLibrary.authorizationStatus()
if status == ALAuthorizationStatus.Restricted {
    println("status == ALAuthorizationStatus.Restricted")
    // フォトライブラリにアクセスすることを許可されていない状態
    
} else if status == ALAuthorizationStatus.Denied {
    println("status == ALAuthorizationStatus.Denied")
    // ユーザが明示的にフォトライブラリのアクセスを拒否した状態
    
} else if status == ALAuthorizationStatus.Authorized {
    println("status == ALAuthorizationStatus.Authorized")
    // ユーザがフォトライブラリへのアクセスを承認している状態
    
} else if status == ALAuthorizationStatus.NotDetermined {
    println("status == ALAuthorizationStatus.NotDetermined")
    // ユーザがフォトライブラリへのアクセスの選択を行っていない状態
    
}

サンプルコード

ViewController の viewDidLoad で、アルバムアクセスを判定するサンプルコードは以下のようになります。

ViewController.swift

import UIKit
import AssetsLibrary

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        var status: ALAuthorizationStatus = ALAssetsLibrary.authorizationStatus()
        if status == ALAuthorizationStatus.Restricted {
            println("status == ALAuthorizationStatus.Restricted")
            // フォトライブラリにアクセスすることを許可されていない状態
            
        } else if status == ALAuthorizationStatus.Denied {
            println("status == ALAuthorizationStatus.Denied")
            // ユーザが明示的にフォトライブラリのアクセスを拒否した状態
            
        } else if status == ALAuthorizationStatus.Authorized {
            println("status == ALAuthorizationStatus.Authorized")
            // ユーザがフォトライブラリへのアクセスを承認している状態
            
        } else if status == ALAuthorizationStatus.NotDetermined {
            println("status == ALAuthorizationStatus.NotDetermined")
            // ユーザがフォトライブラリへのアクセスの選択を行っていない状態
            
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

まとめ

一度ユーザーに写真アクセスを「許可しない」を選択された場合は、この判定を入れないと iOS の 設定 > アプリ名 > 写真 でアクセスを許可してもらわなければいけません。GPS 等の機能に関しても同様です。

iOS に不慣れなユーザーにとっては、これはある程度、難易度の高いオペレーションだと思います。

こういった仕様はセキュリティ上仕方ないことなのですが、iOS の場合、Apple が 厳格な審査 を行っているのですから、リリースを許可したアプリに関して、Apple はアプリ開発者とそれを利用するユーザーを考慮した最適解を模索し続けて欲しいと感じました。

この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

siro:chro 無料ゲーム SQN をリリースしました

img_sqn_00

sirochro 初の無料ゲームアプリ SQN をリリースしました。
記事:SQN: iOS 無料ゲームアプリ SQN - Sequential Numbers をリリース
ちょっとした時間に楽しめる完全無料のゲームなっていますので、是非ダウンロードして遊んでみてください。

↓SQN のダウンロードはこちらから

Related Contents

Pickup Contents