CodeBlanks Logo Icon CodeBlanks

Kamera izni

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

App.js
// useCameraPermission hook'unu yaz
// useState ile status tut; useEffect içinde izin iste; status döndür

Örnek çözüm

App.js
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ü

Soru
if (status === ____) { /* kamera aç */ }
Cevap
if (status === 'granted') { /* kamera aç */ }

Açıklama: status 'granted' ise kamera açılır.

2 Kamera izni reddedilirse ne olur?

App.js
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ı

Orta seviye bölümündeki tüm dersler