البدء السريع: Flutter
أضف إشعارات تأكيد إلى تطبيق Flutter على Android عبر Firebase وعلى iPhone عبر Apple مباشرة. لا
يحتاج مشروع Flutter إلى google-services.json؛ بعد ربط مشروع Firebase في لوحة تأكيد، تعطي المنصة
المكتبة الإعدادات العامة اللازمة تلقائياً.
في هذه الصفحة
ملاحظة
تنتقل من OneSignal؟ أسماء الاستدعاءات متقاربة تحت Takeed. راجع
الانتقال من OneSignal.
1أضف مفاتيح الإشعارات في لوحة التحكم#
افتح التطبيقات ← اختر التطبيق ← الإعدادات ← الإشعارات ← مفاتيح Firebase وApple ← إضافة مفتاح.
Android: من Firebase Console افتح Project settings ← Service accounts ← Generate new private key، ثم ارفع ملف حساب الخدمة بصيغة JSON في تأكيد. يحفظه تأكيد مشفراً ولا يعرضه مرة أخرى.
عند أول اتصال من المكتبة يقرأ تأكيد اسم الحزمة الحقيقي من تطبيق Flutter، ثم يعيد استعمال تطبيق
Android المطابق في Firebase أو ينشئه تلقائياً داخل المشروع ويعيد إعداداته للمكتبة. لا تسجل تطبيق
Android يدوياً ولا تضف google-services.json إلى Flutter.
يجب أن تكون Firebase Management API مفعلة وأن يملك حساب الخدمة صلاحية قراءة تطبيقات Firebase
وإنشائها. يبقى google-services.json حلاً احتياطياً متقدماً لتطبيق Android موجود إذا تعذر على
تأكيد إدارة المشروع.
iPhone: من Apple Developer ← Certificates, Identifiers & Profiles ← Keys أنشئ مفتاحاً
مفعلاً لخدمة Apple Push Notifications service (APNs). ارفع ملف .p8 في تأكيد، ثم أدخل
Key ID وTeam ID وBundle ID. يجب أن يتطابق Bundle ID حرفياً في Apple Developer وXcode
وتأكيد.
بعد ذلك انسخ App ID من معلومات التطبيق في تأكيد.
2ثبّت المكتبة#
dependencies:
takeed_flutter: ^2.1.2flutter pub getفي Android لا تضف google-services.json ولا Google Services Gradle Plugin ولا
firebase_messaging. إذا كان تطبيقك يستعمل Firebase لخدمات أخرى فاحتفظ بإعداداته؛ يعمل Firebase
الخاص بتأكيد إلى جانبه.
3إعداد Xcode لإشعارات iPhone#
- افتح
ios/Runner.xcworkspaceفي Xcode، ولا تفتحRunner.xcodeproj. - اختر مشروع Runner الأزرق، ثم Target باسم Runner ← Signing & Capabilities.
- اختر Apple Developer Team وفعّل Automatically manage signing، ثم تأكد أن Bundle Identifier مطابق تماماً للقيمة المسجلة في Apple Developer وتأكيد.
- اضغط + Capability وأضف Push Notifications إلى Runner. يفترض أن يضيف Xcode صلاحية
aps-environment. لا تحتاج Background Modes لإشعارات تأكيد الاعتيادية التي تعرض تنبيهاً. - نفّذ الأوامر التالية، ثم افتح ملف workspace مجدداً وابنِ Runner:
flutter clean
flutter pub get
cd ios
pod installللاختبار النهائي استخدم iPhone حقيقياً، اسمح بالإشعارات عند طلب التطبيق، ثم أرسل إشعار تجربة من تأكيد. نسخة Debug تستخدم APNs Sandbox، أما TestFlight وApp Store فتستخدمان بيئة الإنتاج.
الصور والأزرار وتأكيد الوصول على iOS#
هذه المزايا تحتاج Notification Service Extension:
- في Xcode اختر File ← New ← Target ← Notification Service Extension.
- سمّه
NotificationService، واختر Apple Team نفسه، ثم اضغط Activate عندما يسأل Xcode. - اجعل iOS Deployment Target للإضافة هو iOS 12 أو أحدث، واترك Bundle ID تابعاً لمعرف التطبيق،
مثل
com.example.app.NotificationService. - استبدل ملف
NotificationService.swiftالذي أنشأه Xcode بالملفextension/NotificationService.swiftالموجود داخل حزمةtakeed_flutter. - نفّذ
cd ios && pod installمجدداً، ثم ابنِ Runner وليس Target الإضافة وحده.
لا تحتاج App Group. وإذا كنت تريد عنواناً ونصاً فقط، يمكن ترك Notification Service Extension دون إضافتها.
4شغّل المكتبة#
import 'package:flutter/material.dart';
import 'package:takeed_flutter/takeed_flutter.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Takeed.initialize('YOUR-APP-ID');
runApp(const MyApp());
}في Android تجلب المكتبة إعدادات Firebase بحسب Package Name. وفي iOS تسجل الجهاز مع APNs بحسب Bundle ID. لا تضع أي مفتاح سري داخل تطبيق Flutter.
5الإذن والمستخدمون والضغط على الإشعار#
اطلب الإذن في وقت مناسب داخل التطبيق:
final granted = await Takeed.Notifications.requestPermission(true);
await Takeed.login(user.id); // بعد تسجيل دخول المستخدم
await Takeed.User.addTags({'plan': 'gold', 'city': 'Basra'});
Takeed.Notifications.addClickListener((event) {
final data = event.notification.additionalData;
final button = event.result.actionId;
});وعند تسجيل الخروج:
await Takeed.logout();أرسل إشعار تجربة#
افتح صفحة اختبار الإشعارات في تأكيد وأرسل إلى كل الأجهزة، أو أرسله من خادمك:
curl https://takeed-iq.com/api/v1/notifications \
-H "Authorization: Key $TAKEED_KEY" \
-H "Content-Type: application/json" \
-d '{"app_id":"YOUR-APP-ID","included_segments":["All"],
"headings":{"ar":"مرحباً"},"contents":{"ar":"الإشعارات تعمل"}}'إذا لم يصل الإشعار#
| الرسالة | الحل |
|---|---|
no Firebase settings for com.your.app |
تحقق أن حساب الخدمة الصحيح مربوط وأن Firebase Management API مفعلة، ثم افتح التطبيق مجدداً. يفترض أن ينشئ تأكيد الحزمة أو يعيد استعمالها تلقائياً. استخدم google-services.json فقط إذا تعذرت إدارة المشروع. |
no push token |
لم يبدأ Firebase أو لم يصدر رمزاً؛ تحقق من السطر السابق ومن توفر Google Play Services على الجهاز. |
unknown_platform_config |
مشروع Firebase للجهاز أو Bundle ID لا يطابق أي مفتاح محفوظ للتطبيق. |
No podspec found |
حدّث إلى takeed_flutter 2.1.2 أو أحدث، نفّذ flutter clean واحذف ios/Pods وios/Podfile.lock ثم نفّذ flutter pub get وpod install. |
| لا يصل شيء إلى iPhone | تحقق من Push Notifications في Runner، وتطابق Bundle ID، وصحة ملف .p8 وKey ID وTeam ID. |
| يصل النص دون الصورة أو الأزرار | أضف Notification Service Extension واستبدل ملف Swift بالملف المرفق مع المكتبة. |
تظهر أخطاء التسليم التي ترجعها Firebase أو Apple داخل تفاصيل كل إشعار في سجل الإشعارات.
المرجع الكامل للمكتبة موجود في مستودع takeed_flutter.