نافذة التقييم (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 لضمان التحقق عند كل مرة يدخل فيها المستخدم إلى الواجهة.

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

اترك تعليقاً

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

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

أفضل محرر نصوص مقالات للمواقع

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

إقرأ المزيد

انتعش بالصيف مع الكركديه البارد وفوائده الرائعة

انتعش بالصيف مع الكركديه البارد وفوائده المنعشة!

إقرأ المزيد

اكتشف قوة التسويق الرقمي: نجاح غير محدود للأعمال الصغيرة

افتح آفاق جديدة لأعمالك الصغيرة بالتسويق الرقمي!

إقرأ المزيد
اشترك بالقائمة البريدية ليصلك جديدنا
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