الفرق بين المراجعتين ل"ReactNative/permissionsandroid"
رقية-بورية (نقاش | مساهمات) (أنشأ الصفحة ب' = PermissionsAndroid = ==== خاصٌّ بالمشاريع المكتوبة بشفرة Native ==== هذه المقالة مطبَّقة على المشاريع المك...') |
جميل-بيلوني (نقاش | مساهمات) ط (مراجعة) |
||
سطر 1: | سطر 1: | ||
− | + | <noinclude>{{DISPLAYTITLE:PermissionsAndroid في React Native}}</noinclude> | |
− | + | <blockquote> | |
− | |||
==== خاصٌّ بالمشاريع المكتوبة بشفرة Native ==== | ==== خاصٌّ بالمشاريع المكتوبة بشفرة Native ==== | ||
− | هذه المقالة مطبَّقة على المشاريع المكتوبة بشفرة Native فقط، أما إذا كنت تستخدم سير العمل <code>expo-cli</code> فعليك الاطلاع على الدليل [https://docs.expo.io/versions/latest/sdk/permissions Permissions] ضمن توثيق Expo لإيجاد البديل الملائم. | + | هذه المقالة مطبَّقة على المشاريع المكتوبة بشفرة Native فقط، أما إذا كنت تستخدم سير العمل <code>expo-cli</code> فعليك الاطلاع على الدليل [https://docs.expo.io/versions/latest/sdk/permissions Permissions] ضمن توثيق Expo لإيجاد البديل الملائم.</blockquote>يَسمح <code>PermissionsAndroid</code> بالوصول إلى نموذج الأُذونات (permissions) الجديد الخاص بالنظام Android M، تُمنح الأذونات العادية (normal) بشكلٍ افتراضيٍّ عند تثبيت التطبيق، وتبقى كذلك طالما أنها موجودة في <code>AndroidManifest.xml</code>. غير أن الأذونات الخطرة (dangerous) تتطلب مربع حوار المحثّ (prompt)، وسيتم استخدام هذا النموذج من أجل تلك الأذونات. |
− | |||
− | يَسمح <code>PermissionsAndroid</code> بالوصول إلى نموذج الأُذونات (permissions) الجديد الخاص بالنظام Android M، تُمنح الأذونات العادية | ||
− | تُمنح الأذونات تلقائيًّا في الأجهزة التي تستخدم أدوات تطوير البرمجيات (SDK) ذات الإصدارات الأقدم من 23 طالما تظهر في البيان (manifest) | + | تُمنح الأذونات تلقائيًّا في الأجهزة التي تستخدم أدوات تطوير البرمجيات (SDK) ذات الإصدارات الأقدم من 23 طالما تظهر في البيان (manifest)، لذا ستكون نتيجة <code>check</code> دائما <code>true</code> وسيؤول الطلب <code>request</code> دائمًا إلى <code>PermissionsAndroid.RESULTS.GRANTED</code>. |
إذا كانت الأذونات التي سُئِل المستخدم عنها سابقًا عبر مربع حوارٍ ملغيّةً، يُخطِر نظام التشغيل (OS) التطبيق الذي يعمل عليه المستخدم ليُظهر سبب الحاجة لهذه الأذونات. يُستخدم المعامل الاختياري <code>rationale</code> لإظهار مربع حوار المحثّ عند الضرورة فقط، أما في باقي الحالات سيظهر محثّ الأذونات الاعتياديّ. | إذا كانت الأذونات التي سُئِل المستخدم عنها سابقًا عبر مربع حوارٍ ملغيّةً، يُخطِر نظام التشغيل (OS) التطبيق الذي يعمل عليه المستخدم ليُظهر سبب الحاجة لهذه الأذونات. يُستخدم المعامل الاختياري <code>rationale</code> لإظهار مربع حوار المحثّ عند الضرورة فقط، أما في باقي الحالات سيظهر محثّ الأذونات الاعتياديّ. | ||
سطر 129: | سطر 126: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | == الأذونات التي تتطلب أخذ علم المستخدم == | |
وتكون على شكل ثوابت ملحقة ضمن <code>PermissionsAndroid.PERMISSIONS</code>: | وتكون على شكل ثوابت ملحقة ضمن <code>PermissionsAndroid.PERMISSIONS</code>: | ||
سطر 146: | سطر 143: | ||
* <code>WRITE_CALL_LOG</code>: كتابة سجل الاتصال الهاتفي 'android.permission.WRITE_CALL_LOG'. | * <code>WRITE_CALL_LOG</code>: كتابة سجل الاتصال الهاتفي 'android.permission.WRITE_CALL_LOG'. | ||
* <code>ADD_VOICEMAIL</code>: إضافة بريد صوتي 'com.android.voicemail.permission.ADD_VOICEMAIL'. | * <code>ADD_VOICEMAIL</code>: إضافة بريد صوتي 'com.android.voicemail.permission.ADD_VOICEMAIL'. | ||
− | * <code>USE_SIP</code>: استخدام خدمة الاتصال عبر | + | * <code>USE_SIP</code>: استخدام خدمة الاتصال عبر الإنترنت (SIP) 'android.permission.USE_SIP'. |
* <code>PROCESS_OUTGOING_CALLS</code>: معالجة الاتصالات الصادرة 'android.permission.PROCESS_OUTGOING_CALLS'. | * <code>PROCESS_OUTGOING_CALLS</code>: معالجة الاتصالات الصادرة 'android.permission.PROCESS_OUTGOING_CALLS'. | ||
* <code>BODY_SENSORS</code>: حساسات الجسم 'android.permission.BODY_SENSORS'. | * <code>BODY_SENSORS</code>: حساسات الجسم 'android.permission.BODY_SENSORS'. | ||
سطر 152: | سطر 149: | ||
* <code>RECEIVE_SMS</code>: استقبال الرسائل النصية 'android.permission.RECEIVE_SMS'. | * <code>RECEIVE_SMS</code>: استقبال الرسائل النصية 'android.permission.RECEIVE_SMS'. | ||
* <code>READ_SMS</code>: قراءة الرسائل النصية 'android.permission.READ_SMS'. | * <code>READ_SMS</code>: قراءة الرسائل النصية 'android.permission.READ_SMS'. | ||
− | * <code>RECEIVE_WAP_PUSH</code>: استقبال رسائل المعلومات (wap push) 'android.permission.RECEIVE_WAP_PUSH'. | + | * <code>RECEIVE_WAP_PUSH</code>: استقبال رسائل المعلومات (wap push) 'android.permission.RECEIVE_WAP_PUSH'. |
* <code>RECEIVE_MMS</code>: استقبال الرسائل المصورة 'android.permission.RECEIVE_MMS' | * <code>RECEIVE_MMS</code>: استقبال الرسائل المصورة 'android.permission.RECEIVE_MMS' | ||
* <code>READ_EXTERNAL_STORAGE</code>: قراءة وسائط التخزين الخارجية 'android.permission.READ_EXTERNAL_STORAGE'. | * <code>READ_EXTERNAL_STORAGE</code>: قراءة وسائط التخزين الخارجية 'android.permission.READ_EXTERNAL_STORAGE'. | ||
* <code>WRITE_EXTERNAL_STORAGE</code>: الكتابة على وسائط التخزين الخارجية 'android.permission.WRITE_EXTERNAL_STORAGE'. | * <code>WRITE_EXTERNAL_STORAGE</code>: الكتابة على وسائط التخزين الخارجية 'android.permission.WRITE_EXTERNAL_STORAGE'. | ||
− | + | == السلسلة النصية الناتجة عن طلب الأذونات == | |
وتكون على شكل ثوابت ملحقة ضمن <code>PermissionsAndroid.PERMISSIONS</code> | وتكون على شكل ثوابت ملحقة ضمن <code>PermissionsAndroid.PERMISSIONS</code> | ||
سطر 183: | سطر 180: | ||
!'''الوصف''' | !'''الوصف''' | ||
|- | |- | ||
− | |permission | + | |<code>permission</code> |
− | |سلسلة نصية | + | |سلسلة نصية (string) |
− | |||
− | string | ||
|نعم | |نعم | ||
− | |الإذن الذي | + | |الإذن الذي سيُفحَص |
|} | |} | ||
سطر 196: | سطر 191: | ||
</syntaxhighlight>يطلب من المستخدم منح الأذونات ويُعيد الوعد المقبول مع السلسلة النصية (انظر إلى السلاسل النصية الناتجة عن طلب الأذونات في الأعلى)، للدلالة إلى موافقة المستخدم على الطلب أو رفضه أو أنه لا يريد أن يُسأل ثانيةً. | </syntaxhighlight>يطلب من المستخدم منح الأذونات ويُعيد الوعد المقبول مع السلسلة النصية (انظر إلى السلاسل النصية الناتجة عن طلب الأذونات في الأعلى)، للدلالة إلى موافقة المستخدم على الطلب أو رفضه أو أنه لا يريد أن يُسأل ثانيةً. | ||
− | إذا كانت <code>rationale</code> متوفرةً فإن هذا التابع يتأكُّد مع نظام التشغيل ضرورة إظهار صندوقِ حوارِ يشرح سبب الحاجة للأذونات https://developer.android.com/training/permissions/requesting | + | إذا كانت <code>rationale</code> متوفرةً فإن هذا التابع يتأكُّد مع نظام التشغيل ضرورة إظهار صندوقِ حوارِ يشرح سبب الحاجة للأذونات (انظر [https://developer.android.com/training/permissions/requesting#explain هذا القسم] للاستزادة)، وعندها يظهر صندوق حوار أذونات النظام. |
==== المعاملات ==== | ==== المعاملات ==== | ||
سطر 205: | سطر 200: | ||
!'''الوصف''' | !'''الوصف''' | ||
|- | |- | ||
− | |permission | + | |<code>permission</code> |
− | |سلسلة نصية | + | |سلسلة نصية (string) |
− | |||
− | string | ||
|نعم | |نعم | ||
− | |الإذن الذي | + | |الإذن الذي سيُفحص |
|- | |- | ||
− | |rationale | + | |<code>rationale</code> |
− | |كائن | + | |كائن (object) |
− | |||
− | object | ||
|لا | |لا | ||
|انظر <code>rationale</code>في الأسفل | |انظر <code>rationale</code>في الأسفل | ||
سطر 227: | سطر 218: | ||
!'''الوصف''' | !'''الوصف''' | ||
|- | |- | ||
− | |title | + | |<code>title</code> |
− | |سلسلة نصية | + | |سلسلة نصية (string) |
− | |||
− | string | ||
|نعم | |نعم | ||
|عنوان صندوق الحوار | |عنوان صندوق الحوار | ||
|- | |- | ||
− | |message | + | |<code>message</code> |
− | |سلسلة نصية | + | |سلسلة نصية (string) |
− | |||
− | |||
|نعم | |نعم | ||
|رسالة صندوق الحوار | |رسالة صندوق الحوار | ||
|- | |- | ||
− | |buttonPositive | + | |<code>buttonPositive</code> |
− | |سلسلة نصية | + | |سلسلة نصية (string) |
− | |||
− | string | ||
|نعم | |نعم | ||
|نص مفتاح الموافقة على الطلب | |نص مفتاح الموافقة على الطلب | ||
|- | |- | ||
− | |buttonNegative | + | |<code>buttonNegative</code> |
− | |سلسلة نصية | + | |سلسلة نصية (string) |
− | |||
− | string | ||
|لا | |لا | ||
|نص مفتاح رفض الطلب | |نص مفتاح رفض الطلب | ||
|- | |- | ||
− | |buttonNeutral | + | |<code>buttonNeutral</code> |
− | |سلسلة نصية | + | |سلسلة نصية (string) |
− | |||
− | string | ||
|لا | |لا | ||
|نص مفتاح عدم السّؤال مرةً أخرى | |نص مفتاح عدم السّؤال مرةً أخرى | ||
سطر 275: | سطر 256: | ||
!'''الوصف''' | !'''الوصف''' | ||
|- | |- | ||
− | |permissions | + | |<code>permissions</code> |
− | |مصفوفة | + | |مصفوفة (array) |
− | |||
− | array | ||
|نعم | |نعم | ||
|مصفوفة الأذونات التي يجب طلبها | |مصفوفة الأذونات التي يجب طلبها | ||
|} | |} | ||
− | + | == مصادر == | |
* [https://facebook.github.io/react-native/docs/permissionsandroid صفحة PermissionsAndroid في توثيق React Native الرسميّ] | * [https://facebook.github.io/react-native/docs/permissionsandroid صفحة PermissionsAndroid في توثيق React Native الرسميّ] | ||
+ | [[تصنيف:ReactNative]] |
مراجعة 11:00، 6 يناير 2021
خاصٌّ بالمشاريع المكتوبة بشفرة Native
هذه المقالة مطبَّقة على المشاريع المكتوبة بشفرة Native فقط، أما إذا كنت تستخدم سير العمل
expo-cli
فعليك الاطلاع على الدليل Permissions ضمن توثيق Expo لإيجاد البديل الملائم.
يَسمح PermissionsAndroid
بالوصول إلى نموذج الأُذونات (permissions) الجديد الخاص بالنظام Android M، تُمنح الأذونات العادية (normal) بشكلٍ افتراضيٍّ عند تثبيت التطبيق، وتبقى كذلك طالما أنها موجودة في AndroidManifest.xml
. غير أن الأذونات الخطرة (dangerous) تتطلب مربع حوار المحثّ (prompt)، وسيتم استخدام هذا النموذج من أجل تلك الأذونات.
تُمنح الأذونات تلقائيًّا في الأجهزة التي تستخدم أدوات تطوير البرمجيات (SDK) ذات الإصدارات الأقدم من 23 طالما تظهر في البيان (manifest)، لذا ستكون نتيجة check
دائما true
وسيؤول الطلب request
دائمًا إلى PermissionsAndroid.RESULTS.GRANTED
.
إذا كانت الأذونات التي سُئِل المستخدم عنها سابقًا عبر مربع حوارٍ ملغيّةً، يُخطِر نظام التشغيل (OS) التطبيق الذي يعمل عليه المستخدم ليُظهر سبب الحاجة لهذه الأذونات. يُستخدم المعامل الاختياري rationale
لإظهار مربع حوار المحثّ عند الضرورة فقط، أما في باقي الحالات سيظهر محثّ الأذونات الاعتياديّ.
مثال
- مثال لمكون دالة (Function Component)
import React from "react";
import { StyleSheet, Text, View, SafeAreaView, PermissionsAndroid, Button } from "react-nat ive";
import Constants from "expo-constants";
const requestCameraPermission = async () => {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.CAMERA,
{
title: "Cool Photo App Camera Permission",
message:
"Cool Photo App needs access to your camera " +
"so you can take awesome pictures.",
buttonNeutral: "Ask Me Later",
buttonNegative: "Cancel",
buttonPositive: "OK"
}
);
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
console.log("You can use the camera");
} else {
console.log("Camera permission denied");
}
} catch (err) {
console.warn(err);
}
};
const App = () => (
<View style={styles.container}>
<Text style={styles.item}>Try permissions</Text>
<Button title="request permissions" onPress={requestCameraPermission} />
</View>
);
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
paddingTop: Constants.statusBarHeight,
backgroundColor: "#ecf0f1",
padding: 8
},
item: {
margin: 24,
fontSize: 18,
fontWeight: "bold",
textAlign: "center"
}
});
export default App;
- مثال لمكون صنف (Class Component)
import React, { Component } from "react";
import { StyleSheet, Text, View, SafeAreaView, PermissionsAndroid, Button } from "react-native";
import Constants from "expo-constants";
const requestCameraPermission = async () => {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.CAMERA,
{
title: "Cool Photo App Camera Permission",
message:
"Cool Photo App needs access to your camera " +
"so you can take awesome pictures.",
buttonNeutral: "Ask Me Later",
buttonNegative: "Cancel",
buttonPositive: "OK"
}
);
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
console.log("You can use the camera");
} else {
console.log("Camera permission denied");
}
} catch (err) {
console.warn(err);
}
};
class App extends Component {
render() {
return (
<View style={styles.container}>
<Text style={styles.item}>Try permissions</Text>
<Button title="request permissions" onPress={requestCameraPermission} />
</View>
);
}
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
paddingTop: Constants.statusBarHeight,
backgroundColor: "#ecf0f1",
padding: 8
},
item: {
margin: 24,
fontSize: 18,
fontWeight: "bold",
textAlign: "center"
}
});
export default App;
الأذونات التي تتطلب أخذ علم المستخدم
وتكون على شكل ثوابت ملحقة ضمن PermissionsAndroid.PERMISSIONS
:
READ_CALENDAR
: قراءة التقويم 'android.permission.READ_CALENDAR'.WRITE_CALENDAR
: كتابة التقويم 'android.permission.WRITE_CALENDAR'.CAMERA
: الكاميرا 'android.permission.CAMERA'.READ_CONTACTS
: قراءة جهات الاتصال 'android.permission.READ_CONTACTS'.WRITE_CONTACTS
: كتابة جهات الاتصال 'android.permission.WRITE_CONTACTS'.GET_ACCOUNTS
: الحصول على الحسابات 'android.permission.GET_ACCOUNTS'.ACCESS_FINE_LOCATION
: الوصول للموقع الدقيق 'android.permission.ACCESS_FINE_LOCATION'.ACCESS_COARSE_LOCATION
: الوصول للموقع التقريبي 'android.permission.ACCESS_COARSE_LOCATION'.RECORD_AUDIO
: تسجيل الصوت 'android.permission.RECORD_AUDIO'.READ_PHONE_STATE
: قراءة حالة الهاتف 'android.permission.READ_PHONE_STATE'.CALL_PHONE
: اتصال هاتفي 'android.permission.CALL_PHONE'.READ_CALL_LOG
: قراءة سجل الاتصال الهاتفي 'android.permission.READ_CALL_LOG'.WRITE_CALL_LOG
: كتابة سجل الاتصال الهاتفي 'android.permission.WRITE_CALL_LOG'.ADD_VOICEMAIL
: إضافة بريد صوتي 'com.android.voicemail.permission.ADD_VOICEMAIL'.USE_SIP
: استخدام خدمة الاتصال عبر الإنترنت (SIP) 'android.permission.USE_SIP'.PROCESS_OUTGOING_CALLS
: معالجة الاتصالات الصادرة 'android.permission.PROCESS_OUTGOING_CALLS'.BODY_SENSORS
: حساسات الجسم 'android.permission.BODY_SENSORS'.SEND_SMS
: إرسال الرسائل النصية 'android.permission.SEND_SMS'.RECEIVE_SMS
: استقبال الرسائل النصية 'android.permission.RECEIVE_SMS'.READ_SMS
: قراءة الرسائل النصية 'android.permission.READ_SMS'.RECEIVE_WAP_PUSH
: استقبال رسائل المعلومات (wap push) 'android.permission.RECEIVE_WAP_PUSH'.RECEIVE_MMS
: استقبال الرسائل المصورة 'android.permission.RECEIVE_MMS'READ_EXTERNAL_STORAGE
: قراءة وسائط التخزين الخارجية 'android.permission.READ_EXTERNAL_STORAGE'.WRITE_EXTERNAL_STORAGE
: الكتابة على وسائط التخزين الخارجية 'android.permission.WRITE_EXTERNAL_STORAGE'.
السلسلة النصية الناتجة عن طلب الأذونات
وتكون على شكل ثوابت ملحقة ضمن PermissionsAndroid.PERMISSIONS
GRANTED
: مُنِح الإذن 'granted'.DENIED
: رُفِض الأذن 'denied'.NEVER_ASK_AGAIN
: لا تطلب الإذن ثانيةً 'never_ask_again'.
التوابع
constructor()
constructor();
check()
check(permission);
يعيد هذا التابع وعدًا (promise) يقبَل إلى قيمة منطقية (boolean) للدلالة على منح الأذونات المخصصة.
المعاملات
الاسم | النوع | مطلوب | الوصف |
---|---|---|---|
permission
|
سلسلة نصية (string) | نعم | الإذن الذي سيُفحَص |
request()
request(permission, [rationale]);
يطلب من المستخدم منح الأذونات ويُعيد الوعد المقبول مع السلسلة النصية (انظر إلى السلاسل النصية الناتجة عن طلب الأذونات في الأعلى)، للدلالة إلى موافقة المستخدم على الطلب أو رفضه أو أنه لا يريد أن يُسأل ثانيةً.
إذا كانت rationale
متوفرةً فإن هذا التابع يتأكُّد مع نظام التشغيل ضرورة إظهار صندوقِ حوارِ يشرح سبب الحاجة للأذونات (انظر هذا القسم للاستزادة)، وعندها يظهر صندوق حوار أذونات النظام.
المعاملات
الاسم | النوع | مطلوب | الوصف |
---|---|---|---|
permission
|
سلسلة نصية (string) | نعم | الإذن الذي سيُفحص |
rationale
|
كائن (object) | لا | انظر rationale في الأسفل
|
كائن عرض السبب (Rationale)
الاسم | النوع | مطلوب | الوصف |
---|---|---|---|
title
|
سلسلة نصية (string) | نعم | عنوان صندوق الحوار |
message
|
سلسلة نصية (string) | نعم | رسالة صندوق الحوار |
buttonPositive
|
سلسلة نصية (string) | نعم | نص مفتاح الموافقة على الطلب |
buttonNegative
|
سلسلة نصية (string) | لا | نص مفتاح رفض الطلب |
buttonNeutral
|
سلسلة نصية (string) | لا | نص مفتاح عدم السّؤال مرةً أخرى |
requestMultiple()
requestMultiple(permissions);
يطلب من المستخدم منح أذونات متعددة في مربع حوارٍ واحد، ويُعيد كائنًا مع الأذونات كمفاتيح، والسلاسل النصية كقيم (انظر إلى السلاسل النصية الناتجة عن طلب الأذونات في الأعلى)، للدلالة على موافقة المستخدم على الطلب أو رفضه أو أنه لا يريد أن يُسأل ثانيةً.
المعاملات
الاسم | النوع | مطلوب | الوصف |
---|---|---|---|
permissions
|
مصفوفة (array) | نعم | مصفوفة الأذونات التي يجب طلبها |