Help us understand the problem. What is going on with this article?

【iOS】アプリに各アクセス権限が付与されているか確認する方法

More than 3 years have passed since last update.

備忘録代わりに書きます。

カメラ、カメラロール、マイク、プッシュ通知の4つです

カメラ

AVFoundationを使います。

import AVFoundation

let status = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo)

if status == AVAuthorizationStatus.Authorized {
    // アクセス許可あり
} else if status == AVAuthorizationStatus.Restricted {
    // ユーザー自身にカメラへのアクセスが許可されていない
} else if status == AVAuthorizationStatus.NotDetermined {
    // まだアクセス許可を聞いていない
} else if status == AVAuthorizationStatus.Denied {
    // アクセス許可されていない
}

マイク

カメラと一緒です。

AVMediaTypeVideoAudioかの違いになります。

import AVFoundation

let status = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeAudio)

if status == AVAuthorizationStatus.Authorized {
    // アクセス許可あり
} else if status == AVAuthorizationStatus.Restricted {
    // ユーザー自身にカメラへのアクセスが許可されていない
} else if status == AVAuthorizationStatus.NotDetermined {
    // まだアクセス許可を聞いていない
} else if status == AVAuthorizationStatus.Denied {
    // アクセス許可されていない
}

カメラロール

AssetsLibraryを使います。

import AssetsLibrary

let status = ALAssetsLibrary.authorizationStatus()
if status == ALAuthorizationStatus.Authorized {
    // アクセス許可あり
} else if status == ALAuthorizationStatus.Restricted {
    // ユーザー自身にカメラへのアクセスが許可されていない
} else if status == ALAuthorizationStatus.NotDetermined {
    // まだアクセス許可を聞いていない
} else if status == ALAuthorizationStatus.Denied {
    // アクセス許可されていない
}

Push通知

これは iOS7iOS8 で対応方法が変わります。

// iOS7の場合
let remoteNotificationType: UIRemoteNotificationType = UIApplication.sharedApplication().enabledRemoteNotificationTypes()

// Noneじゃなかったら許可あり
let isAuthorization = (remoteNotificationType != UIRemoteNotificationType.None)

// iOS8の場合
UIApplication.sharedApplication().isRegisteredForRemoteNotifications()

となります。

ちなみにUIRemoteNotificationTypeは以下のような

struct UIRemoteNotificationType : RawOptionSetType {
    init(_ rawValue: UInt)
    init(rawValue rawValue: UInt)
    static var None: UIRemoteNotificationType { get }
    static var Badge: UIRemoteNotificationType { get }
    static var Sound: UIRemoteNotificationType { get }
    static var Alert: UIRemoteNotificationType { get }
    static var NewsstandContentAvailability: UIRemoteNotificationType { get }
}

という構造体になります。

以上です。

ryokosuge
金髪iOS エンジニア なんか色々やってます
https://ryokosuge.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away