نافذة التقييم (Rating Window) لتطبيقك SwiftUI


فيما يلي جميع الأجزاء الخاصة بنافذة التقييم (Rating Window) مع شرح لكيفية دمجها في مشروعك. هذه الأكواد نموذجية ويمكنك تخصيصها حسب الحاجة:


1. الاستيرادات اللازمة

import SwiftUI
import StoreKit

تأكد من إضافة StoreKit حتى تتمكن من استدعاء واجهة التقييم الخاصة بـApple.


2. تعريف المتغيرات (Variables)

// متغير تحكم في عرض تنبيه (الـAlert) التقييم
@State private var showRatingAlert: Bool = false 

// تاريخ بدء التقييم (لن يظهر التنبيه قبل هذا التاريخ)
private let startRatingDate = Calendar.current.date(
    from: DateComponents(year: 2025, month: 2, day: 1)
)!

يمكنك تعديل تاريخ البدء (startRatingDate) بحيث يناسب متطلباتك، أو إزالته إذا لم تكن بحاجة إليه.


3. استدعاء نافذة التقييم (.alert)

ضع هذا الجزء ضمن جسم الـView (عادةً في نهاية body):

.alert("Do you like our app?", isPresented: $showRatingAlert) {
    Button("YES") {
        rateApp()  // استدعاء وظيفة تقييم التطبيق
    }
    Button("later", role: .cancel) {}
} message: {
    Text("⭐⭐⭐⭐⭐")
}
  • isPresented: $showRatingAlert هو البارامتر الذي يحدد ظهور التنبيه من عدمه بناءً على قيمة showRatingAlert.
  • يمكنك تعديل النصوص وتنسيقات الأزرار كما تريد.

4. استدعاء الدالة في onAppear

حتى يتم التحقق من الشروط وعرض التقييم في الوقت المناسب، استدعِ الدالة المسؤولة عن التحقق (checkRatingDate) في onAppear، مثلاً:

.onAppear {
    checkRatingDate()
}

5. دالة التحقق من التاريخ والشروط (checkRatingDate)

private func checkRatingDate() {
    let today = Date()
    let calendar = Calendar.current
    
    // (اختياري) إذا أردت منع ظهور التقييم قبل تاريخ محدد
    guard today >= startRatingDate else {
        return
    }
    
    // الحصول على الشهر الحالي والسنة الحالية
    let currentMonth = calendar.component(.month, from: today)
    let currentYear = calendar.component(.year, from: today)
    
    // قراءة الشهر والسنة الأخيرين من UserDefaults (إن كنت تريد ظهوره مرة واحدة بالشهر)
    let lastRatingMonth = UserDefaults.standard.integer(forKey: "lastRatingMonth")
    let lastRatingYear = UserDefaults.standard.integer(forKey: "lastRatingYear")
    
    // إذا لم يتم عرض التقييم هذا الشهر أو كانت السنة مختلفة
    if currentMonth != lastRatingMonth || currentYear != lastRatingYear {
        // أظهر نافذة التقييم
        showRatingAlert = true
        
        // خزّن هذا الشهر والسنة كآخر مرة ظهر فيها التنبيه
        UserDefaults.standard.set(currentMonth, forKey: "lastRatingMonth")
        UserDefaults.standard.set(currentYear, forKey: "lastRatingYear")
    }
}
  • إذا كنت تريد حصر عدد المرات التي يظهر فيها التنبيه خلال الشهر/السنة، أو ترحيله لشهور أخرى، يمكنك تعديل المنطق الداخلي.

6. دالة تقييم التطبيق (rateApp)

private func rateApp() {
    if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
        SKStoreReviewController.requestReview(in: scene)
    }
}

هذه الدالة تستدعي واجهة التقييم من Apple دون نقلك إلى App Store مباشرة. إذا أردت توجيه المستخدم إلى صفحة التطبيق في متجر التطبيقات، يمكنك استخدام رابط مباشر بدلاً من SKStoreReviewController.requestReview(in:).


مثال كامل (مبسط)

إليك مثال بسيط يوضح مكان وضع الأكواد السابقة داخل ContentView:

import SwiftUI
import StoreKit

struct ContentView: View {
    @State private var showRatingAlert: Bool = false
    private let startRatingDate = Calendar.current.date(
        from: DateComponents(year: 2025, month: 2, day: 1)
    )!

    var body: some View {
        VStack {
            Text("Hello, world!")
                .padding()
        }
        .onAppear {
            checkRatingDate()
        }
        .alert("Do you like our app?", isPresented: $showRatingAlert) {
            Button("YES") {
                rateApp()
            }
            Button("later", role: .cancel) {}
        } message: {
            Text("⭐⭐⭐⭐⭐")
        }
    }
    
    private func checkRatingDate() {
        let today = Date()
        let calendar = Calendar.current
        
        // تحقق من أن التاريخ الحالي >= startRatingDate
        guard today >= startRatingDate else {
            return
        }

        let currentMonth = calendar.component(.month, from: today)
        let currentYear = calendar.component(.year, from: today)
        
        let lastRatingMonth = UserDefaults.standard.integer(forKey: "lastRatingMonth")
        let lastRatingYear = UserDefaults.standard.integer(forKey: "lastRatingYear")
        
        if currentMonth != lastRatingMonth || currentYear != lastRatingYear {
            showRatingAlert = true
            UserDefaults.standard.set(currentMonth, forKey: "lastRatingMonth")
            UserDefaults.standard.set(currentYear, forKey: "lastRatingYear")
        }
    }
    
    private func rateApp() {
        if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
            SKStoreReviewController.requestReview(in: scene)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

النقاط الأساسية:

  1. متغير الحالة (@State var showRatingAlert) لتحديد توقيت عرض التنبيه.
  2. دالة التحقق (checkRatingDate) للتحكم في منطق عرض النافذة (حسب التاريخ، عدد مرات الظهور، أو شروط أخرى).
  3. دالة التقييم (rateApp) لإظهار واجهة التقييم الخاصة بـ Apple.
  4. دمج تنبيه التقييم (.alert(...)) مع أي View تريد فيه ظهور التنبيه.
  5. استدعاء الدالة (checkRatingDate) في onAppear لضمان التحقق عند كل مرة يدخل فيها المستخدم إلى الواجهة.

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

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

مواضيع مشابهة

كيف تبدأ مشروعك الخاص من الصفر؟

يحلم العديد من الناس بامتلاك مشروعهم الخاص وهذا أمر رائع ، لكن ليس بالسهل حيث يحتاج إنشاء مشروع خاص بك العديد من الخطوات و التخطيط بالإضافة إلى العمل الجاد و المستمر ، ومن خلال مقالة اليوم سوف نعرفك على مجموعة الخطوات التي تحتاجها لأجل تأسيس مشروعك ، تابع معنا . اختيار الفكرة الأساسية للمشروع لا […]

إقرأ المزيد
علامات الولادة المبكرة

علامات الولادة المبكرة وكيف تميز بينها وبين الولادة الطبيعية

"دليك الشامل لعلامات الولادة المبكرة، وكيفية تجنب حدوثها" تعرف الولادة المبكرة بأنها ولادة تحدث قبل الأسبوع الـ 37 من الحمل. وهي مشكلة طبية تتطلب اهتمامًا فوريًا وتقييمًا دقيقًا. إذا لم تتم معالجتها بشكل صحيح، قد تكون لها تأثيرات جسدية وعاطفية خطيرة على الأم والجنين. لذا سنتعرف في هذا المقال على علامات الولادة المبكرة، وما هي […]

إقرأ المزيد
فوائد عسل النحل

أهم فوائد عسل النحل: كنز صحي طبيعي للإنسان

"دليلك الشامل لفوائد عسل النحل، وكيفية استخدامه للاستفادة منه والاستشفاء به" يعد واحدًا من أكثر المواد الغذائية فائدة والمكملات العلاجية المثلى في العالم الطبيعي. يتميز بمزيج فريد من النكهات والقيم الغذائية، ويعتبر مصدرًا للصحة والعافية. سنكشف في هذا المقال عن العديد من الفوائد الرائعة التي يقدمها عسل النحل للإنسان. القيمة الغذائية لعسل النحل  تتمثل القيمة […]

إقرأ المزيد
اشترك بالقائمة البريدية ليصلك جديدنا
Please enable JavaScript in your browser to complete this form.
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram