فيما يلي جميع الأجزاء الخاصة بنافذة التقييم (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()
}
}
النقاط الأساسية:
- متغير الحالة (
@State var showRatingAlert
) لتحديد توقيت عرض التنبيه. - دالة التحقق (
checkRatingDate
) للتحكم في منطق عرض النافذة (حسب التاريخ، عدد مرات الظهور، أو شروط أخرى). - دالة التقييم (
rateApp
) لإظهار واجهة التقييم الخاصة بـ Apple. - دمج تنبيه التقييم (
.alert(...)
) مع أي View تريد فيه ظهور التنبيه. - استدعاء الدالة (
checkRatingDate
) فيonAppear
لضمان التحقق عند كل مرة يدخل فيها المستخدم إلى الواجهة.
وبهذا تحصل على جميع الأكواد الخاصة بنافذة التقييم. يمكنك نسخ هذه الأجزاء وتضمينها في شاشتك الرئيسية أو أي شاشة أخرى تريد أن تظهر فيها نافذة التقييم.