Kamera izni
- React Native kursu
- Orta seviye
- Ders 108/116
- 5 dk
Kamera izni istemeyi öğrenirsin.
Kamera izni
Kamera izni, uygulamanın kamerayı açabilmesi için gereken onaydır. Permissions.askAsync(Permissions.CAMERA) ile istenir. status === 'granted' ise kamera açılabilir; değilse kullanıcı yönlendirilmelidir.
Kamera, en hassas izinlerden biridir; kullanıcılar buna temkinli yaklaşır. Bu yüzden izni açılışta değil, kullanıcı 'Fotoğraf çek' butonuna basınca istemek daha doğaldır. Reddedilirse kamera açılmaz; kullanıcıya neden gerekli olduğu kısa bir mesajla anlatılabilir. iOS'ta Info.plist dosyasına NSCameraUsageDescription eklenmelidir; aksi halde uygulama çöker. Expo bu açıklamayı app.json'daki ios.infoPlist altında alır.
İki adımlı akış
Kamera izni için iki adımlı bir akış yaygındır. Önce Permissions.getAsync(Permissions.CAMERA) ile mevcut durumu kontrol edersin. 'granted' ise kamera açılır. 'denied' ise kullanıcı ayarlara yönlendirilir. 'undetermined' ise askAsync ile ilk kez istenir.
Bu akış, kullanıcıya gereksiz diyalog göstermemeyi sağlar. getAsync diyalog çıkarmaz; yalnızca kayıtlı durumu okur. 'undetermined' durumu daha önce hiç sorulmadığını belirtir; o zaman askAsync çağrılır. Reddedilmiş bir izni askAsync ile tekrar sormak diyaloğu göstermez; bu yüzden ayarlara yönlendirme gerekir. Bu akış, gerçekçi bir kamera özelliğinin belkemiğidir.
Uygulama useCameraPermission hook'u
Bir useCameraPermission hook'u yaz. useState('undetermined') ile status tut. useEffect içinde Permissions.askAsync(Permissions.CAMERA) çağır; .then ile setStatus yap. status'ü döndür.
Başlangıç kodu
// useCameraPermission hook'unu yaz
// useState ile status tut; useEffect içinde izin iste; status döndürÖrnek çözüm
import { useState, useEffect } from "react";
import * as Permissions from "expo-permissions";
export function useCameraPermission() {
const [status, setStatus] = useState("undetermined");
useEffect(() => {
Permissions.askAsync(Permissions.CAMERA).then(({ status }) => {
setStatus(status);
});
}, []);
return status;
}Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 status granted kontrolü
if (status === ____) { /* kamera aç */ }
if (status === 'granted') { /* kamera aç */ }
Açıklama: status 'granted' ise kamera açılır.
2 Kamera izni reddedilirse ne olur?
if (status !== 'granted') { /* ... */ }- Kamera yine açılır
- Uygulama çöker
- Cihaz yeniden başlar
- Kamera açılmaz Doğru cevap
Açıklama: Kamera izni reddedilirse kamera açılmaz.
3 Akışı rolüne eşle
| Kavram | Anlamı |
|---|---|
getAsync |
Mevcut durumu okur |
askAsync |
İlk kez ister |
'granted' |
İzin verildi |
'undetermined' |
Hiç sorulmadı |