محتويات الدورة

iOS / Swift / أنظمة ميسرة وأدلة الأهداف / الدرس 16

الأذونات والمشاهد والحالة الخاصة

سوِّ القدرات عند تغير المشاهد مع حفظ نية المستخدم وملكية الحساب وحدود الخصوصية.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • نشاط المشهد إشارة عمر
  • مثّل حالات الإذن دون دمجها
  • افصل تحديث الحالة عن طلب الإذن

نشاط المشهد إشارة عمر

قد يحوي تطبيق iOS مشاهد متعددة ويتحول المشهد بين النشاط والخمول والخلفية. ليس تغير الحالة أمرا جديدا ولا يضمن وصول كل حدث قبل إنهاء العملية. احفظ المسودات بسياسة مقصودة لا بانتظار آخر رد خلفية. وقد تتقادم حالة الإذن أو الحساب عند التفعيل. حدّثها حيث تحتاج الميزة ولا تعِد تلقائيا حجزا أو دفعا أو فعلا مؤثرا لمجرد عودة الظهور.

مثّل حالات الإذن دون دمجها

قد يميز تفويض الإشعارات غير المحدد والمرفوض والمفوض والمؤقت والمحدود على الأهداف المناسبة. يربط المقتطف الأول الفئات بشرح تطبيق ويضيف بديلا لحالات مستقبلية. تستخدم الواجهة المترجمة موارد بدلا من النصوص المصطنعة. لا تجعل كل حالة غير مفوضة فشلا واحدا إذا أفادت قدرة محدودة. وفي المقابل لا يثبت الإذن جدولة إشعار أو تسليمه أو رؤيته. افصل الحالة من نتيجة العملية.

swift مقتطف توضيحي من Swift أو SwiftUI؛ يتطلب بيئة الأدوات المبيّنة.
import UserNotifications
func authorizationLabel(_ status: UNAuthorizationStatus) -> String {
    switch status {
    case .notDetermined: return "Not requested"
    case .denied: return "Denied"
    case .authorized: return "Authorized"
    case .provisional: return "Provisional"
    case .ephemeral: return "Ephemeral"
    @unknown default: return "Unknown status"
    }
}
// authorizationLabel(.denied) -> "Denied"
الناتج المتوقع
Denied maps to Denied; unsupported future cases use Unknown status.

يربط قيمة موجودة فقط، ولا يطلب إذنا أو يجدول إشعارا.

افصل تحديث الحالة عن طلب الإذن

يعبر المقتطف الثاني عن تشغيل تحديث يملكه المشهد عبر رد محقون. لا يطلب تفويض النظام مع كل تفعيل. وينبغي للرد دمج القراءات المكررة وحماية الاكتمال القديم بهوية الطلب والجلسة. اطلب الإذن في تدفق يفهم فيه المستخدم الغرض وبديل الرفض. لا يعوض التكرار السياق، وقد تتطلب حالات رفض تعافيا من الإعدادات بحسب المنصة. لا تستدعي الدورة هذه التفاعلات.

swift مقتطف توضيحي من Swift أو SwiftUI؛ يتطلب بيئة الأدوات المبيّنة.
struct CapabilityStatusView: View {
    @Environment(\.scenePhase) private var phase
    let refreshStatus: () -> Void
    var body: some View {
        Text("Capability status")
            .onChange(of: phase) { _, next in
                if next == .active { refreshStatus() }
            }
    }
}
الناتج المتوقع
A transition to active requests status refresh; it does not repeat a prior save.

يتطلب SwiftUI وصيغة onChange ذات القيمتين في iOS17. يقدم النموذج سياسة ملكية العمل غير المتزامن للرد.

حدّد نطاق الحالة الخاصة بالحساب الحالي

ينبغي للخروج إبطال بيانات الاعتماد وحقوق نشر المعلق والمخازن الخاصة والتنقل ضمن انتقال حساب منسق. لا يملأ رد الحساب السابق عرضا باقيا للمستخدم التالي. أدرج هوية الجلسة في البوابات وحل المسارات المستعادة بصلاحية حالية. وحدّد حفظ المسودات أو تصديرها أو إسقاطها بسياسة صريحة. لا تحتفظ بمحتوى خاص إلى الأبد لمجرد نطاق النموذج العام. ليست قائمة معطلة ضبط وصول معتمدا.

عامل التطبيق الموزع كأثر قابل للفحص

ليس الثابت المترجم أو الأصل أو إعداد البناء المضمن حد أسرار. أبق أسرار الخادم المميزة في خادم مفوض واستخدم تخزين اعتماد مناسب للمنصة بقواعده. راجع السجلات وعرض تبديل المشاهد للمحتوى الخاص غير اللازم. اتبع الميزة ودورة البيانات في الخصوصية لا جمع كل حمولة لإمكانه تقنيا. وينبغي لوصف الإذن وإعداد القدرة مطابقة الفعل الحقيقي؛ فلا يمنح شرح العميل سلطة للخادم.

اختبر الانقطاع وتغير القدرات صراحة

يحاكي بديل النموذج الرفض والإذن المحدود وتغير الإعداد وانتهاء الجلسة والخروج أثناء قراءة. افحص منع نشر القديم في حساب جديد وعدم إعادة الأوامر عند التفعيل. تحتاج نوافذ النظام والمشاهد والتخزين المحمي والتعافي بعد الإنهاء إلى تكامل Apple مصرح به. سجّل الهدف والإعداد المختبرين. لم تُنفذ أذونات أو أحداث مشهد أو تخزين اعتماد أو جهاز أثناء التأليف؛ فالأمثلة توضيحية ولا تعتمد سلوك المنصة.

الأخطاء الشائعة وإصلاحها

يعيد التفعيل أمرا مؤثرا

لماذا يحدث؟
اعتُبر الظهور نية متجددة.
كيف تصلحه؟
حدّث الحالة واشترط حدث أمر مقصودا.
كيف تتجنب تكراره؟
اختبر تفعيلًا متكررا أثناء العمل.

تبدو حالتا الرفض والمؤقت متماثلتين

لماذا يحدث؟
دُمجت الفئات دون سياسة ميزة.
كيف تصلحه؟
اربط الحالات الموثقة بقدرات صريحة.
كيف تتجنب تكراره؟
اختبر كل فئة تفويض مناسبة.

تبقى بيانات الحساب السابق في جلسة جديدة

لماذا يحدث؟
افتقد المخزن والنشر نطاق الحساب.
كيف تصلحه؟
أبطل بجيل حساب وراجع الاستعادة.
كيف تتجنب تكراره؟
بدّل الحسابات قبل اكتمال الرد المزيف.

اختبر فهمك

1. هل يجدول تحديث الإذن الإشعار السابق تلقائيا؟

اعرض الحل المشروح

لا. تسوية الحالة وأمر المستخدم مستقلان. قد أُلغيت النية السابقة أو استُبدلت أو اكتملت. حدّث القدرة ودع أمرا حاليا صريحا يقرر ملاءمة الجدولة بحسب السياسة.

2. هل يحمي ثابت private في العميل مفتاح API ذا صلاحيات؟

اعرض الحل المشروح

لا. ينظم private الاستخدام في المصدر لا سرية الأثر الموزع. ضع العمليات المميزة خلف تفويض خادم. وعامل إعداد العميل قابلا للفحص واضبط السجلات والمحفوظ بدورة خصوصية مراجعة.

أهم ما تعلمته

  • نشاط المشهد إشارة عمر
  • اختبر الانقطاع وتغير القدرات صراحة

المراجع الرسمية