انتقل إلى المحتوى

البدء السريع: 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ثبّت المكتبة#

yaml
dependencies:
  takeed_flutter: ^2.1.2
bash
flutter pub get

في Android لا تضف google-services.json ولا Google Services Gradle Plugin ولا firebase_messaging. إذا كان تطبيقك يستعمل Firebase لخدمات أخرى فاحتفظ بإعداداته؛ يعمل Firebase الخاص بتأكيد إلى جانبه.

3إعداد Xcode لإشعارات iPhone#

  1. افتح ios/Runner.xcworkspace في Xcode، ولا تفتح Runner.xcodeproj.
  2. اختر مشروع Runner الأزرق، ثم Target باسم Runner ← Signing & Capabilities.
  3. اختر Apple Developer Team وفعّل Automatically manage signing، ثم تأكد أن Bundle Identifier مطابق تماماً للقيمة المسجلة في Apple Developer وتأكيد.
  4. اضغط + Capability وأضف Push Notifications إلى Runner. يفترض أن يضيف Xcode صلاحية aps-environment. لا تحتاج Background Modes لإشعارات تأكيد الاعتيادية التي تعرض تنبيهاً.
  5. نفّذ الأوامر التالية، ثم افتح ملف workspace مجدداً وابنِ Runner:
bash
flutter clean
flutter pub get
cd ios
pod install

للاختبار النهائي استخدم iPhone حقيقياً، اسمح بالإشعارات عند طلب التطبيق، ثم أرسل إشعار تجربة من تأكيد. نسخة Debug تستخدم APNs Sandbox، أما TestFlight وApp Store فتستخدمان بيئة الإنتاج.

الصور والأزرار وتأكيد الوصول على iOS#

هذه المزايا تحتاج Notification Service Extension:

  1. في Xcode اختر File ← New ← Target ← Notification Service Extension.
  2. سمّه NotificationService، واختر Apple Team نفسه، ثم اضغط Activate عندما يسأل Xcode.
  3. اجعل iOS Deployment Target للإضافة هو iOS 12 أو أحدث، واترك Bundle ID تابعاً لمعرف التطبيق، مثل com.example.app.NotificationService.
  4. استبدل ملف NotificationService.swift الذي أنشأه Xcode بالملف extension/NotificationService.swift الموجود داخل حزمة takeed_flutter.
  5. نفّذ cd ios && pod install مجدداً، ثم ابنِ Runner وليس Target الإضافة وحده.

لا تحتاج App Group. وإذا كنت تريد عنواناً ونصاً فقط، يمكن ترك Notification Service Extension دون إضافتها.

4شغّل المكتبة#

dart
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الإذن والمستخدمون والضغط على الإشعار#

اطلب الإذن في وقت مناسب داخل التطبيق:

dart
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;
});

وعند تسجيل الخروج:

dart
await Takeed.logout();

أرسل إشعار تجربة#

افتح صفحة اختبار الإشعارات في تأكيد وأرسل إلى كل الأجهزة، أو أرسله من خادمك:

bash
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.

جرّبه على رقمك: مؤسستك الأولى تأتي مع 5 رموز الواتساب مجانًا.

أنشئ حسابًا