Mengendalikan Kebenaran dengan Baik
Semak status kebenaran sebelum memintanya, paparkan penerangan mengikut konteks kepada pengguna dan kurangkan fungsi dengan baik apabila kebenaran ditolak.
Mengendalikan Kebenaran dengan Baik ialah pelajaran React Native Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran React Native Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus React Native Academy merangkumi sejumlah 4 pelajaran.
Mengapa Pengendalian Kebenaran Penting
iOS dan Android memerlukan persetujuan pengguna yang jelas sebelum aplikasi boleh mengakses keupayaan sensitif seperti kamera, lokasi, mikrofon atau kenalan. Cara anda meminta dan memberi respons terhadap keputusan kebenaran amat mempengaruhi kepercayaan pengguna dan penilaian aplikasi. Permintaan kebenaran yang dibuat pada waktu yang tidak sesuai atau tanpa penjelasan sering menyebabkan penolakan, dan selepas ditolak, satu-satunya cara pemulihan ialah melalui aplikasi Tetapan peranti.
Kitar Hayat Kebenaran: Empat Keadaan
Sesuatu kebenaran boleh berada dalam salah satu daripada empat keadaan: undetermined (belum pernah diminta), granted (pengguna membenarkannya), denied (pengguna menolaknya semasa permintaan terakhir), dan restricted (iOS — disekat oleh kawalan ibu bapa dan tidak boleh diubah). Aplikasi anda mesti mengendalikan setiap keadaan dengan betul dan tidak boleh menganggap kebenaran telah diberikan tanpa membuat semakan.
import { PermissionStatus } from 'expo-location';
const { status } = await Location.getForegroundPermissionsAsync();
switch (status) {
case PermissionStatus.UNDETERMINED:
// Safe to call requestForegroundPermissionsAsync()
break;
case PermissionStatus.GRANTED:
// Proceed with the feature
break;
case PermissionStatus.DENIED:
// Show instructions to open Settings
break;
}Semak Sebelum Meminta
Sentiasa semak status kebenaran semasa dengan panggilan get*Async sebelum memanggil request*Async. Jika kebenaran telah diberikan, langkau dialog permintaan. Jika kebenaran telah ditolak, jangan minta semula — iOS akan mengabaikan permintaan itu secara senyap dan Android akan memaparkan bar mesej kecil buat seketika. Paparkan permintaan hanya apabila status ialah undetermined.
async function ensureCameraPermission(): Promise<boolean> {
const { status } = await Camera.getCameraPermissionsAsync();
if (status === 'granted') return true;
if (status === 'undetermined') {
const { status: newStatus } = await Camera.requestCameraPermissionsAsync();
return newStatus === 'granted';
}
// status === 'denied' — direct user to Settings
return false;
}Penerangan Kontekstual Sebelum Meminta Kebenaran
Sebelum mencetuskan dialog kebenaran OS, paparkan kepada pengguna skrin penerangan tersuai yang menjelaskan dalam bahasa mudah sebab aplikasi anda memerlukan kebenaran tersebut dan manfaatnya kepada mereka. Skrin “pengenalan” ini meningkatkan kadar pemberian kebenaran dengan ketara. Skrin ini hendaklah muncul tepat sebelum dialog sistem, bukannya semasa pengenalan awal sebelum konteks ciri diberikan.
function LocationRationale({ onConfirm }: { onConfirm: () => void }) {
return (
<View style={styles.rationale}>
<Ionicons name='location-outline' size={48} color='#6200ee' />
<Text style={styles.title}>Share your location</Text>
<Text style={styles.body}>
We use your location to show nearby restaurants and
calculate accurate delivery times.
</Text>
<Button title='Allow Location' onPress={onConfirm} />
<Button title='Not Now' onPress={() => {}} color='gray' />
</View>
);
}Pautan ke Tetapan Aplikasi Apabila Ditolak
Apabila pengguna telah menolak sesuatu kebenaran dan ciri itu tidak boleh berfungsi tanpanya, arahkan mereka ke aplikasi Tetapan peranti untuk memberikannya secara manual. Gunakan Linking.openSettings() daripada React Native untuk membuka halaman tetapan aplikasi secara terus. Jelaskan dalam amaran perkara yang perlu mereka aktifkan sebelum memanggil openSettings.
import { Linking, Alert } from 'react-native';
function showSettingsPrompt(feature: string) {
Alert.alert(
feature + ' Access Denied',
'Please enable ' + feature + ' access in your device Settings to use this feature.',
[
{ text: 'Cancel', style: 'cancel' },
{ text: 'Open Settings', onPress: () => Linking.openSettings() },
]
);
}Pengurangan Fungsi Secara Berperingkat
Pengurangan fungsi secara berperingkat bermaksud aplikasi anda masih berfungsi — dengan fungsi yang dikurangkan — apabila sesuatu kebenaran ditolak. Contohnya, aplikasi penghantaran makanan yang tidak mendapat akses lokasi boleh memaparkan input alamat manual dan bukannya mengesan alamat secara automatik. Reka setiap ciri yang bergantung pada kebenaran dengan laluan alternatif supaya tiada pengguna terhalang sepenuhnya daripada nilai teras aplikasi.
export default function LocationPicker() {
const [permission] = Location.useForegroundPermissions();
const granted = permission?.granted;
if (granted) {
return <MapWithAutoLocation />; // use GPS
}
return <ManualAddressInput />; // fallback — type address manually
}canAskAgain: Satu Peluang untuk Meminta Semula
Objek hasil kebenaran mengandungi sifat canAskAgain. Pada iOS, selepas pengguna mengetik “Jangan Benarkan” pada dialog sistem, canAskAgain menjadi false dan sistem tidak akan memaparkan dialog itu lagi untuk kebenaran tersebut. Pada Android, nilainya menjadi false selepas pengguna menolak sebanyak dua kali. Sentiasa semak bendera ini untuk menentukan sama ada hendak memaparkan butang permintaan semula atau pautan Tetapan.
const { status, canAskAgain } = await Camera.requestCameraPermissionsAsync();
if (status !== 'granted') {
if (canAskAgain) {
// Show in-app explanation and re-request button
setShowRationale(true);
} else {
// Show link to Settings — OS won't show dialog again
showSettingsPrompt('Camera');
}
}Mengendalikan Pelbagai Kebenaran
Sesetengah ciri memerlukan beberapa kebenaran serentak — contohnya, pemilih media memerlukan akses kepada kamera dan pustaka media. Minta kebenaran tersebut secara berurutan, dengan menyemak setiap hasil sebelum meminta kebenaran seterusnya. Jika mana-mana kebenaran ditolak, kendalikannya dan berhenti — jangan teruskan kepada permintaan seterusnya supaya pengguna tidak dibebani oleh beberapa dialog sistem yang muncul berturut-turut.
async function requestMediaFeaturePermissions() {
const { status: cameraStatus } = await Camera.requestCameraPermissionsAsync();
if (cameraStatus !== 'granted') {
showSettingsPrompt('Camera');
return false;
}
const { status: mediaStatus } = await MediaLibrary.requestPermissionsAsync();
if (mediaStatus !== 'granted') {
showSettingsPrompt('Media Library');
return false;
}
return true;
}Mengekalkan Keadaan Kebenaran
Anda tidak perlu mengekalkan keadaan kebenaran dalam AsyncStorage — sentiasa dapatkannya semula dengan panggilan get*Async kerana pengguna boleh mengubah kebenaran dalam Tetapan peranti antara sesi aplikasi. Walau bagaimanapun, anda boleh menyimpan bendera seperti hasSeenPermissionRationale dalam AsyncStorage supaya skrin penerangan tersuai hanya dipaparkan sekali dan tidak dipaparkan semula setiap kali aplikasi dilancarkan.
async function maybeShowRationale() {
const seen = await AsyncStorage.getItem('seenLocationRationale');
if (!seen) {
setShowRationale(true);
await AsyncStorage.setItem('seenLocationRationale', 'true');
} else {
// Rationale seen before — go straight to checking permission
await checkLocationPermission();
}
}Menguji Aliran Kebenaran
Uji keempat-empat keadaan kebenaran: pelancaran pertama (undetermined), diberikan, ditolak dan ditolak dengan canAskAgain=false. Pada Simulator iOS, tetapkan semula kebenaran melalui aplikasi Tetapan Peranti. Pada Emulator Android, gunakan Maklumat Aplikasi untuk menarik balik kebenaran secara manual. Uji juga pautan Tetapan — pastikan pautan itu membuka halaman tetapan khusus aplikasi yang betul, bukannya skrin tetapan peranti umum.
Cangkuk Kebenaran Boleh Digunakan Semula
Rangkumkan keseluruhan kitar hayat kebenaran — semakan, penerangan, permintaan dan laluan alternatif ke Tetapan — ke dalam cangkuk tersuai yang boleh digunakan semula. Cangkuk itu mengembalikan status semasa dan fungsi untuk mencetuskan permintaan kebenaran. Ini menghapuskan kod pengendalian kebenaran yang berulang pada berbilang skrin yang memerlukan keupayaan yang sama.
function useCameraPermission() {
const [status, setStatus] = React.useState<string>('undetermined');
async function request() {
const { status: s, canAskAgain } = await Camera.requestCameraPermissionsAsync();
setStatus(s);
if (s !== 'granted' && !canAskAgain) {
showSettingsPrompt('Camera');
}
}
useEffect(() => {
Camera.getCameraPermissionsAsync().then(({ status: s }) => setStatus(s));
}, []);
return { status, granted: status === 'granted', request };
}Semakan Pantas
Uji pemahaman anda tentang konsep Pembangunan Mudah Alih React Native daripada pelajaran ini.
Ulang Kaji Pelajaran
Dalam pelajaran ini, anda telah mempelajari bahawa menyemak status kebenaran sebelum meminta dapat mengelakkan dialog sistem yang berulang dan mengendalikan keadaan yang telah ditolak dengan betul, canAskAgain menentukan sama ada hendak meminta semula atau mengarahkan pengguna ke Tetapan, dan pengurangan fungsi secara berperingkat menyediakan laluan alternatif supaya kebenaran yang ditolak tidak menghalang pengguna sepenuhnya daripada menggunakan aplikasi anda. Seterusnya, kita akan meneroka borang dan pengesahan dengan react-hook-form.
Pelajari JavaScript dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “Mengendalikan Kebenaran dengan Baik” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran React Native Academy, termasuk “Mengendalikan Kebenaran dengan Baik”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus React Native Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Mengendalikan Kebenaran dengan Baik”?
Semak status kebenaran sebelum memintanya, paparkan penerangan mengikut konteks kepada pengguna dan kurangkan fungsi dengan baik apabila kebenaran ditolak. Anda berlatih React Native Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan React Native Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran React Native Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Mengendalikan Kebenaran dengan Baik” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran React Native Academy ini?
Ya. Setiap pelajaran React Native Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Akses Kamera dengan expo-camera
- Membaca Lokasi GPS dengan expo-location
- Menjadualkan Pemberitahuan Setempat
- Mengendalikan Kebenaran dengan Baik