Разрешения приложений на Android Marshmallow в PhoneGap
В Android Marshmallow нам нужно предоставить доступ к Location, File и т. Д. Отдельно в приложениях. Есть ли какая-нибудь слабость в приложении PhoneGap, которую я могу проверить, есть ли разрешения или нет, и попросить пользователя предоставить разрешения.
2 ответа
ОБНОВЛЕНИЕ 16/02/2016
PhoneGap Build теперь поддерживает API 23 - ура!
Или, если вы строите локально, просто Cordova/Phonegap CLI 6+, и вы получите платформу cordova-android@5+ по умолчанию.
ОРИГИНАЛЬНЫЙ ОТВЕТ
В настоящее время это, безусловно, возможно с помощью интерфейса командной строки Cordova / Phonegap, но Phonegap Build пока не поддерживает API 23 (Android 6.0 / Marshmallow).
Во-первых, вам нужно использовать версию 5.0.0 (или выше) платформы Android, которая использует API 23.
На сегодняшний день версия по умолчанию - 4.1.1 (которая использует API 22), поэтому вам необходимо явно указать версию при добавлении платформы:
cordova platform add android@5.0.0
phonegap platform add android@5.0.0
Основные плагины находятся в процессе обновления для поддержки запроса соответствующих разрешений для Android 6 во время выполнения. Таким образом, вам нужно установить "самые передовые" версии прямо из главной ветки репозиториев GitHub, а не через реестр плагинов npm. Например, используйте:
cordova plugin add https://github.com/apache/cordova-plugin-file
который должен получить версию 4.0.1-dev.
Не версия выпуска npm:
cordova plugin add cordova-plugin-file
который получит вас v3.0.0
Обратите внимание, что версии в основных ветвях не являются выпусками, поэтому могут содержать ошибки.
Таким образом, альтернатива (которую я выбрал) состоит в том, чтобы продолжать использовать версии выпуска плагинов (которые еще не поддерживают запрос разрешений времени выполнения Android), но использовать cordova-Diagnostical-плагин для запроса разрешений времени выполнения Android, что соответствующий плагин ядра требует, прежде чем пытаться использовать API плагин ядра.
Например, чтобы использовать плагин Location, продолжайте использовать версию выпуска через npm:
cordova plugin add cordova-plugin-geolocation
Но прежде чем запрашивать местоположение, убедитесь, что разрешение во время выполнения было предоставлено с помощью диагностического плагина:
function requestLocation(){
navigator.geolocation.getCurrentPosition(onSuccess, onError, options);
}
cordova.plugins.diagnostic.getLocationAuthorizationStatus(function(status){
if(status == "GRANTED"){
requestLocation();
}else{
cordova.plugins.diagnostic.requestLocationAuthorization(function(status){
if(status == "GRANTED"){
requestLocation();
}else{
// Handle other cases
}
}, function(error){
console.error(error);
});
}
}, onError);
Можно явно попросить пользователя включить определенное разрешение с помощью следующего плагина Cordova: https://www.npmjs.com/package/cordova-plugin-android-permissions
Особенно для старых плагинов это может быть очень полезно.