Если Вы когда-либо разрабатывали приложения под iOS, то Вам, должно быть, известно, что такое запросы разрешений, так же как и разработчики, работающие с Android, знакомы с этим начиная с версии Marshmallow. Если приложению требуется получить доступ к местоположению пользователей или ему необходимо воспользоваться системой push-уведомлений в iOS 10, то оно попросит пользователя предоставить на это разрешение.
В iOS 10 Apple произвела изменения в том, как осуществляется контроль за большинством разрешений, потребовав, чтобы разработчики заранее заявляли доступ к личным данным пользователя в файле Info.plist. В этом посте Вы узнаете, как добиться того, чтобы существующие Xamarin-приложения продолжали работать без сбоев с новой политикой разрешений в iOS 10.
Пример запроса разрешений в iOS 9
К примеру, если нам нужно интегрировать в приложение фотографии, то мы можем запросить на это разрешение, введя следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | PHPhotoLibrary.RequestAuthorization(status => { switch(status) { case PHAuthorizationStatus.Authorized: break; case PHAuthorizationStatus.Denied: break; case PHAuthorizationStatus.Restricted: break; default: break; } }); |
Приведенный выше код будет вызвать диалоговое окно (прямое системное сообщение) с запросом разрешения, с которым можно будет согласиться.
Что поменялось в iOS 10?
Начиная с iOS 10 почти все API-интерфейсы, которые требуют запрашивания авторизации, а также другие API, например, как те, что отвечают за открытие камеры или фотогалереи, требуют описания использования новой пары ключ-значение в файле Info.plist. Это очень похоже на требование внесения строчек кода — NSLocationWhenInUseUsageDescription или NSLocationAlwaysUsageDescription в файл Info.plit, когда задействуются Geolocation и IBeacon API. Единственная разница здесь заключается в том, что приложение будет вылетать, если пытается провести авторизацию за отсутствием установленных ключей, которые используют следующие компоненты:
- Bluetooth Sharing
- Calendar
- CallKit/VoIP
- Camera
- Contacts
- Health
- HomeKit
- Location
- Media Library
- Microphone
- Motion
- Photos
- Reminders
- Speech Recognition
- SiriKit
- TV Provider
Эти новые атрибуты начинают действовать, только когда мы осуществляем компиляцию на уровне iOS 10 SDK, это значит, что мы должны вносить определённые ключи, когда используем эти API-интерфейсы. К примеру, если хотим использовать Медиаплагин для Xamarin и Windows, чтобы отснять кадр или просмотреть фотографии, то должны добавить следующие настройки приватности в текущий файл Info.plist:
Когда приложение попытается выбрать фотографию, вот такое сообщение увидят пользователи:
Каждый из этих закрытых ключей устанавливает соответствие с конкретными значениями, прописанными в Info.plist. Открыв этот файл в текстовом редакторе, мы увидим следующее:
1 2 3 4 | <key>NSCameraUsageDescription</key> <string>This app needs access to the camera to take photos.</string> <key>NSPhotoLibraryUsageDescription</key> <string>This app needs access to photos.</string> |
Вот отображение каждого из значений на тот случай, если Вам придётся вручную вносить их в Info.plist:
- Bluetooth Sharing – NSBluetoothPeripheralUsageDescription
- Calendar – NSCalendarsUsageDescription
- CallKit – NSVoIPUsageDescription
- Camera – NSCameraUsageDescription
- Contacts – NSContactsUsageDescription
- Health – NSHealthShareUsageDescription & NSHealthUpdateUsageDescription
- HomeKit – NSHomeKitUsageDescription
- Location – NSLocationUsageDescription, NSLocationAlwaysUsageDescription, NSLocationWhenInUseUsageDescription
- Media Library – NSAppleMusicUsageDescription
- Microphone – NSMicrophoneUsageDescription
- Motion – NSMotionUsageDescription
- Photos – NSPhotoLibraryUsageDescription
- Reminders – NSRemindersUsageDescription
- Speech Recognition – NSSpeechRecognitionUsageDescription
- SiriKit – NSSiriUsageDescription
- TV Provider – NSVideoSubscriberAccountUsageDescription
Узнайте больше
Чтобы лучше разобраться в этих ключах, обязательно ознакомьтесь с документацией Cocoa Keys от Apple. Чтобы узнать больше о новых API-интерфейсах и изменениях iOS 10, не забудьте прочитать гайд Введение в iOS 10, а также новую документацию Расширенные функциональные возможности безопасности и приватности iOS 10.
Автор: James Montemagno
Источник: Официальный блог Xamarin
Написать ответ