Разрешения приложений на 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

Особенно для старых плагинов это может быть очень полезно.

Другие вопросы по тегам