#c# #ios #unity3d
#c# #iOS #unity-игровой движок
Вопрос:
Я создаю приложение в Unity, которое использует камеру телефона и местоположение пользователя. Я хочу, чтобы эти всплывающие окна с разрешениями были показаны пользователю после того, как они прочитают, почему я хочу, чтобы они дали разрешение. Итак, нажатие кнопки «Принять» в приложении должно проверить, есть ли у приложения определенное разрешение, и если нет: попросите это разрешение. Короче говоря, мне нужно: — Способ проверить, есть ли у приложения определенное разрешение — Способ вызвать всплывающее окно с разрешением — (Приятно иметь:) Способ проверить, было ли предоставлено или отклонено разрешение в указанном всплывающем окне
Я уже создал именно это для Android, поскольку Android предоставляет способы сделать это. После поиска в Google я обнаружил, что iOS запрашивает permissionpopups, когда приложение запускает определенную службу, для которой требуется негрантированное разрешение. Это означает, что я мог бы просто запустить службу определения местоположения или камеру, чтобы проверить, есть ли у приложения эти разрешения. Я думаю, что это грязное исправление, поскольку оно требует, чтобы приложение запускало службы, которые в данный момент не нужны.
Ответ №1:
Добро пожаловать в StackOverflow!
Вы можете использовать эту библиотеку:https://github.com/jamesmontemagno/PermissionsPlugin
Если вы хотите получить разрешение на местоположение, вы можете использовать этот код:
try
{
var status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Location);
if (status != PermissionStatus.Granted)
{
if(await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Location))
{
await DisplayAlert("Need location", "Gunna need that location", "OK");
}
var results = await CrossPermissions.Current.RequestPermissionsAsync(Permission.Location);
//Best practice to always check that the key exists
if(results.ContainsKey(Permission.Location))
status = results[Permission.Location];
}
if (status == PermissionStatus.Granted)
{
var results = await CrossGeolocator.Current.GetPositionAsync(10000);
LabelGeolocation.Text = "Lat: " results.Latitude " Long: " results.Longitude;
}
else if(status != PermissionStatus.Unknown)
{
await DisplayAlert("Location Denied", "Can not continue, try again.", "OK");
}
}
catch (Exception ex)
{
LabelGeolocation.Text = "Error: " ex;
}
Комментарии:
1. Спасибо за ответ! Плагин, вероятно, многоват для того, что мне нужно, поскольку мне нужны только два разрешения iOS. Я также заметил, что всегда запрашивается разрешение календаря? Я не думаю, что у меня должно быть это в моем приложении.
2. Вам не нужно будет запрашивать разрешение календаря, оно вам нужно только в вашем info.plist пожалуйста, проголосуйте и отметьте как ответы, если это помогло вам!
3. О, это хорошие новости! Хотя я не совсем уверен, как использовать этот плагин в моем проекте Unity. На странице github ничего не говорится о Unity, и я не могу найти примеров того, как другие люди внедряли это в свои проекты Unity.