Więc zacznę odpowiadać na moje własne pytanie.
Dla GPS:
wydaje się rozsądnym rozwiązaniem. Wydaje się, że system IOS żąda natywnie, jeśli istnieje żądanie geolokalizacji. A dla Androida nie jest natywnie obsługiwane, ale ktoś stworzył moduł do tego (https://github.com/webyonet/react-native-android-location-services-dialog-box)
więc moim twórcy akcji dodałem kolejny kod:
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)
})
Dla sieci: Nie ma natywne wsparcie ponieważ ja też nie robię własnego kreatora akcji, żeby to sprawdzić.
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);
}
}
Trochę dodatkowo:
dla GPS i dodaje to, by sprawdzić, czy użytkownik przechodzi i wyłączyć GPS na środku zadania.
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)
}
}
"Wydaje się, że IOS natywnie żąda, jeśli istnieje żądanie geolokalizacji" - zdarza się to tylko na pierwsze żądanie. na późniejsze żądania po prostu nie działają z kodem i nie wyświetlają żadnego monitu z dialogiem. Testowany na iPhone SE z systemem iOS 8 i komunikat o błędzie Otrzymuję go "Usługi lokalizacyjne wyłączone". – Vee6