Konum izni
- React Native kursu
- İleri seviye
- Ders 20/83
- 5 dk
Konum izni istemeyi öğrenirsin.
Konum izni
Konum bilgisine erişmek için kullanıcıdan izin istenir. expo-location paketi Location.requestForegroundPermissionsAsync işlevini sunar. Bu işlev bir nesne döndürür; status alanı 'granted' ise konum kullanılabilir.
İzin isteğini useEffect içinde yaparsın; sonuç state'e yazılır. State başlangıçta null olur (izin istenmedi), sonra true veya false olur. Bu kalıp, uygulama açılınca otomatik olarak izin isteyen en sağlam yöntemdir. İzin verilmezse konum alınamaz; kullanıcıya neden bilgisini gösterirsin.
İzin state'i
İzin sonuçunu bir state'te tutarsın: const [hasPermission, setHasPermission] = React.useState(null). Başlangıç değeri null; bu, 'henüz sorulmadı' anlamına gelir. useEffect içinde izni iste, sonuçu setHasPermission(permission.status === 'granted') ile yaz.
Render sırasında üç durum kontrol edilir: null ise 'İzin bekleniyor' metni, false ise 'İzin gerekli' metni, true ise konum gösterimi başlatılır. Bu kalıp, kullanıcıya her durumda anlamlı bir geri bildirim verir. State null iken konum işlevleri çağrılmaz.
Uygulama İzin iste ve state'e yaz
Boş useEffect'i tamamla. const permission = await Location.requestForegroundPermissionsAsync() çağır; setHasPermission(permission.status === 'granted') ile sonuçu yaz. useEffect'in ikinci parametresi [] olsun.
Başlangıç kodu
import React from 'react';
import * as Location from 'expo-location';
export function useLocationPermission() {
const [hasPermission, setHasPermission] = React.useState(null);
React.useEffect(() => {
// izin iste ve sonuçu yaz
}, []);
return hasPermission;
}Örnek çözüm
(async () => {
const permission = await Location.requestForegroundPermissionsAsync();
setHasPermission(permission.status === 'granted');
})();Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 İzin işlevini yaz
const permission = await Location.____();
const permission = await Location.requestForegroundPermissionsAsync();
Açıklama: requestForegroundPermissionsAsync konum izni ister.
2 Hangi alan 'granted' değerini taşır?
if (permission.??? === 'granted') { ... }- status Doğru cevap
- granted
- allowed
- result
Açıklama: status alanı 'granted' değerini taşır.
3 State değerini anlama eşle
| Kavram | Anlamı |
|---|---|
null |
İzin bekleniyor |
true |
Konum alınabilir |
false |
İzin verilmedi |
'granted' |
status değeri |