Так что я собираюсь начать отвечать на свой вопрос.
Для GPS:
, кажется, разумное решение. Кажется, что IOS запрашивает запрос геолокации. И для Android это изначально не поддерживается, но кто-то создал модуль для этого (https://github.com/webyonet/react-native-android-location-services-dialog-box)
так в моем действии создателю я добавил следующий код:
if(Platform.OS === 'android')
LocationServicesDialogBox.checkLocationServicesIsEnabled({
message: "<h2>Use Location?</h2> \
This app wants to change your device settings:<br/><br/>\
Use GPS for location<br/><br/>",
ok: "YES",
cancel: "NO"
}).then(() => {
locationTracking(dispatch, getState, geolocationSettings)
})
Для сети: Там нет родной поддержки ни для того, ни для того, чтобы я в конечном итоге делал свой собственный создатель действия для проверки.
export function networkCheck(){
return (dispatch) => {
const dispatchNetworkState = (isConnected) => dispatch({
type: types.NETWORK_STATE,
state: isConnected
})
const handle =() => NetInfo.isConnected.fetch().done(dispatchNetworkState)
NetInfo.isConnected.addEventListener('change', handle);
}
}
Немного больше:
для GPS я добавил это, чтобы проверить, если пользователь зайдет и отключить GPS на середине задачи.
export function locationCheck(geolocationSettings = {enableHighAccuracy: true, timeout: 20000, maximumAge: 10000, distanceFilter:10}){
return (dispatch) => {
navigator.geolocation.watchPosition(
() => {
dispatch({
type: types.LOCATION_STATE,
state: true
})
},
() => {
dispatch({
type: types.LOCATION_STATE,
state: false
})
},
geolocationSettings)
}
}
«Кажется, что IOS запрашивает запрос, если есть запрос геолокации» - похоже, что это происходит только по первому запросу. при последующих запросах они просто выходят из кода и не отображают никаких диалоговых подсказок. Протестировано на iPhone SE с iOS 8 и сообщение об ошибке, которое я получил, «Службы определения местоположения отключены». – Vee6