الانتقال من OneSignal
الانتقال من OneSignal في معظمه تغيير أسماء. خادمك يرسل الطلب نفسه إلى رابط جديد، واستدعاءات Flutter
والويب تحتفظ بأسمائها تحت Takeed، ومشتركينك على أندرويد وiOS ينتقلون معك. لن يحتاج تطبيقك بعد الآن
إلى google-services.json، وتحصل على رموز التحقق عبر الواتساب في الحساب نفسه.
في هذه الصفحة
| ماذا | التفاصيل |
|---|---|
| يبقى كما هو | حقول الواجهة البرمجية وأسماء الشرائح؛ أسماء استدعاءات Flutter v5 وWeb v16؛ معرّفات مستخدميك الخارجية (login) ووسومهم |
| يتغيّر | الرابط والمفتاح؛ OneSignal يصبح Takeed؛ حساب خدمة Firebase يُرفع في لوحة التحكم بدل وضع google-services.json في التطبيق |
| تكسب | إشعارات مجانية وبلا حدود؛ رموز OTP عبر الواتساب في الحساب نفسه؛ فروع لكل منها مفاتيحها وحدودها |
| غير متاح | OneSignal.Debug وLocation وInAppMessages وLiveActivities؛ إرسال البريد الإلكتروني أو الرسائل النصية |
التعديل في الكود صغير، والجزء البطيء هو نشر التطبيق في المتاجر، لذا خطّط للانتقال مع إصدارك القادم. خمس خطوات:
- أنشئ التطبيق وأضف مفاتيحك.
- وجّه خادمك إلى تأكيد.
- بدّل الحزمة في التطبيق.
- استورد مشتركيك.
- أكمل الانتقال.
1أنشئ التطبيق وأضف مفاتيحك#
أنشئ حسابًا وشركة وتطبيقًا. افتح الإعدادات ← إعدادات الإشعارات ← مفاتيح Firebase وApple ثم اختر إضافة مفتاح:
- أندرويد: ملف JSON لحساب خدمة Firebase (من Firebase console: إعدادات المشروع، ثم Service accounts، ثم Generate new private key). يقرأ تأكيد تطبيقات أندرويد في المشروع من Firebase مباشرة، ولا تضع شيئًا داخل تطبيقك.
- iOS: مفتاح APNs بصيغة
.p8مع Key ID وTeam ID وBundle ID الخاص بالتطبيق.
انتبه
استخدم مشروع Firebase نفسه وفريق Apple نفسه اللذين يستخدمهما OneSignal. المشتركين الذين ستستوردهم في الخطوة 4 مرتبطين بهما، ولا يمكن الوصول إليهم من مشروع آخر.
التفاصيل في البدء السريع: Flutter.
2وجّه خادمك إلى تأكيد#
غيّر الرابط والمفتاح والـ App ID، ويبقى محتوى الطلب كما هو:
curl https://api.onesignal.com/notifications \ -H "Authorization: Key $ONESIGNAL_REST_KEY" \curl https://takeed-iq.com/api/v1/notifications \ -H "Authorization: Key $TAKEED_KEY" \ -H "Content-Type: application/json" \ -d '{"app_id": "ONESIGNAL-APP-ID", -d '{"app_id": "TAKEED-APP-ID", "included_segments": ["All"], "headings": {"en": "Hello"}, "contents": {"en": "It works"}}'| OneSignal | تأكيد |
|---|---|
https://api.onesignal.com/notifications (القديم: https://onesignal.com/api/v1/notifications) |
https://takeed-iq.com/api/v1/notifications |
Authorization: Key <REST API key> (المفاتيح القديمة: Basic <key>) |
Authorization: Key <Takeed key>، ويعمل Basic وBearer أيضًا |
app_id |
الـ App ID في تأكيد (أو target مع معرّفاتك) |
| تطبيق OneSignal لكل نطاق فرعي لشركة | تطبيق واحد: target: "app:company"، أو مفتاح فرع |
راجع الحقول التي يرسلها خادمك مع قائمة الحقول المدعومة.
3بدّل الحزمة في التطبيق#
Flutter#
من onesignal_flutter v5 إلى takeed_flutter 2.1.2 أو أحدث:
dependencies: onesignal_flutter: ^5.2.0 takeed_flutter: ^2.1.2import 'package:onesignal_flutter/onesignal_flutter.dart';import 'package:takeed_flutter/takeed_flutter.dart';OneSignal.initialize('ONESIGNAL-APP-ID');await Takeed.initialize('TAKEED-APP-ID');OneSignal.login(user.id);await Takeed.login(user.id);OneSignal.User.addTagWithKey('plan', 'gold');await Takeed.User.addTag('plan', 'gold');- احذف
google-services.jsonوإضافة Google services من Gradle إن كانا موجودين لأجل OneSignal فقط. تأكيد يعطي الحزمة إعدادات Firebase من حساب الخدمة الذي أضفته في الخطوة 1. - على iOS: استبدل ملف Notification Service Extension بالملف
extension/NotificationService.swiftمن الحزمة، واحذف OneSignal pod من ذلك الـ target. - غيّر أسماء بقية الاستدعاءات حسب هذا الجدول:
| OneSignal | تأكيد |
|---|---|
OneSignal.initialize(appId) |
Takeed.initialize(appId) |
OneSignal.login(id) / logout() |
Takeed.login(id) / logout() |
OneSignal.User.addTagWithKey(k, v) |
Takeed.User.addTagWithKey(k, v) أو addTag(k, v) |
OneSignal.User.addTags / removeTag / removeTags |
الأسماء نفسها |
OneSignal.User.addEmail / addSms |
الأسماء نفسها (أو setEmail / setPhone) |
OneSignal.User.pushSubscription.optIn() / optOut() / id |
الأسماء نفسها |
OneSignal.Notifications.requestPermission(true) |
كما هو |
OneSignal.Notifications.addClickListener |
كما هو؛ ونوع الحدث TakeedNotificationClickEvent |
OneSignal.Notifications.addForegroundWillDisplayListener |
كما هو؛ event.preventDefault() / event.display() |
OneSignal.Debug، Location، InAppMessages، LiveActivities |
غير متاح |
الويب (v16)#
<script src="https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js" defer></script><script src="https://takeed-iq.com/sdk/v1/takeed.js" defer></script><script> window.OneSignalDeferred = window.OneSignalDeferred || []; OneSignalDeferred.push(async (OneSignal) => { await OneSignal.init({ appId: 'ONESIGNAL-APP-ID' }); window.TakeedDeferred = window.TakeedDeferred || []; TakeedDeferred.push(async (Takeed) => { await Takeed.init({ appId: 'TAKEED-APP-ID', serviceWorkerPath: '/push/TakeedSDKWorker.js', serviceWorkerScope: '/push/' }); });</script>| OneSignal | تأكيد |
|---|---|
OneSignalDeferred.push(...) |
TakeedDeferred.push(...) |
OneSignal.init({ appId }) |
Takeed.init({ appId, serviceWorkerPath }) |
OneSignalSDKWorker.js |
TakeedSDKWorker.js، يُخدَم من نطاقك أنت |
login، logout، Notifications.permission، Notifications.requestPermission |
الأسماء نفسها |
يوضّح البدء السريع: الويب أين تضع ملف الـ worker.
4استورد مشتركيك#
- من OneSignal، صدّر مشتركيك في ملف CSV.
- في تأكيد، افتح صفحة مستخدمو الإشعارات في التطبيق واستخدم الاستيراد من OneSignal. اختر المفتاح الذي تستخدمه رموز أندرويد وiOS.
- تنتقل رموز أندرويد وiOS، وتصل إشعارات تأكيد حتى إلى الهواتف التي ما زالت على إصدار تطبيقك القديم. أما اشتراكات الويب فلا تنتقل (لأنها مرتبطة بمفاتيح OneSignal)، والمتصفحات التي سمحت بالإشعارات تشترك من جديد تلقائيًا عند زيارتها التالية لصفحة فيها حزمة تأكيد.
5أكمل الانتقال#
- اختبر أولًا: من صفحة مستخدمو الإشعارات اجعل هاتفك جهاز اختبار، ثم أرسل إلى شريحة
Test Usersمن صفحة اختبار الإشعارات. - حوّل خادمك إلى تأكيد في كل عمليات الإرسال. لا ترسل الإشعار نفسه عبر الخدمتين معًا، فالهواتف المسجّلة في الاثنتين ستستلمه مرتين.
- انشر إصدار التطبيق الذي يحمل حزمة تأكيد. الهواتف المحدّثة والتثبيتات الجديدة تسجّل في تأكيد مباشرة.
- عندما تبدو الأرقام في سجل الإشعارات صحيحة، أوقف تطبيق OneSignal.