تسترد Apple وGoogle المبالغ كلٌّ في متجرها فقط، لذا على اشتراكك متعدد المنصات أن ينهي الوصول في كل مكان آخر
عندما تسترد Apple أو Google مبلغ اشتراك متعدد المنصات، لا يعلم تطبيقك على Android ولا تطبيقك على iPhone ولا موقعك الإلكتروني بذلك من تلقاء أنفسهم. إليك كيف تربط كل عملية شراء من المتجر بحساب واحد، وتلغي الاستحقاق الصحيح، وتتوقف عن دفع تكلفة خدمة مستخدمين استردوا أموالهم.

أهم الخلاصات
- تسمح App Review Guideline 3.1.3(b) من Apple للتطبيقات التي تعمل عبر منصات متعددة بأن تمنح المستخدمين الوصول إلى المحتوى والاشتراكات التي حصلوا عليها على منصات أخرى أو على موقع المطور، بشرط أن تكون هذه العناصر متاحة أيضًا كمشتريات داخل التطبيق.
- لا تسترد Apple وGoogle إلا المشتريات التي تمت في متجر كل منهما، لذا فإن استرداد Apple لاشتراك متعدد المنصات لا يصل إلى فوترة العميل في Google Play أو على الويب. على خادم المطور أن يزيل الوصول الذي منحه على كل منصة.
- ترسل Apple إشعار REFUND عبر App Store Server Notifications V2 عندما تسترد مبلغ منتج قابل للاستهلاك أو غير قابل للاستهلاك أو اشتراك غير متجدد أو اشتراك متجدد تلقائيًا، وتنص على أن المطور مسؤول عن تخزين كل معاملة مستردة ومتابعتها واتخاذ الإجراء اللازم بشأنها.
- appAccountToken لدى Apple هو UUID يرفقه المطور بعملية الشراء داخل التطبيق، ويمكن لنقطة النهاية Set App Account Token في App Store Server API إضافته لاحقًا إلى مشتريات تمت خارج التطبيق، مثل رمز عرض تم استبداله.
- يربط setObfuscatedAccountId في Google Play عملية الشراء بحساب في تطبيق المطور، وحده الأقصى 64 حرفًا، وتُحظر المشتريات إذا احتوى على بيانات شخصية غير مشفرة مثل البريد الإلكتروني.
- يُبلغ Voided Purchases API في Google Play عن المشتريات المستردة والمشتريات التي خضعت لرد مبالغ مدفوعة، مع orderId وقيمة voidedSource تساوي 0 للمستخدم أو 1 للمطور أو 2 لـGoogle.
- بالنسبة لطلبات Google Play المقدمة بعد 3 أغسطس 2026، يتحمل المطور سعر الشراء، مخصومًا منه رسوم خدمة Play، إضافة إلى رسوم رد المبالغ المدفوعة التي يفرضها البنك عند قبول رد المبلغ.
دفع مشتركك لـApple، وفتح تطبيقك على Android بعد ظهر اليوم نفسه، وهو يستخدم الآن موقعك الإلكتروني في العمل. ثم تعيد Apple إليه أمواله. لا يعلم Google Play بذلك. ولا تعلم فوترتك على الويب. وما لم ينهِ خادمك الوصول بنفسه، يظل الاشتراك متعدد المنصات المسترد يعمل على كل شاشة تقرأ من قاعدة بيانات حساباتك. المتاجر تسترد المبالغ واجهة متجر تلو الأخرى، ونظام حساباتك هو المكان الوحيد الذي يوجد فيه الاشتراك كاملًا. ولهذا فهو المكان الوحيد القادر على إنهائه.
لماذا لا ينهي استرداد متجر واحد اشتراكًا متعدد المنصات
تسمح Apple بهذا الترتيب صراحةً. تنص App Review Guideline 3.1.3(b)، Multiplatform Services، على أن التطبيقات التي تعمل عبر منصات متعددة يجوز لها أن تتيح للمستخدمين الوصول إلى المحتوى أو الاشتراكات أو الميزات التي حصلوا عليها في تطبيقك على منصات أخرى أو على موقعك الإلكتروني، بشرط أن تكون هذه العناصر متاحة أيضًا كمشتريات داخل التطبيق.
يشرح دليل Apple لتقديم اشتراك واحد عبر عدة تطبيقات كيف يجري ذلك عمليًا. خادمك هو الذي يمنح الوصول، باستخدام قاعدة بيانات حسابات موحدة، وكل تطبيق يقرأ منها. ويحذر الدليل نفسه من أنه إذا لم تُنقل عملية الشراء إلى التطبيقات الأخرى، فقد ينتهي الأمر بالمستخدم إلى الدفع أكثر من مرة مقابل الخدمة نفسها.
لهذا التصميم نتيجة يغفل عنها كثيرون. الاستحقاق موجود في قاعدة بياناتك، لكن كل متجر لا يعرف إلا إيصالاته. يمكن لـApple أن تسترد مبلغ الشراء على iPhone وتُبلغ خادمك. لكنها لا تستطيع إبلاغ تطبيقك على Android أو موقعك الإلكتروني بأي شيء. وإذا كان معالج الاسترداد لا يحدّث إلا عميل iOS، يستعيد العميل أمواله ويحتفظ بالاشتراك في كل مكان آخر.
| أين دفع العميل | من يقرر الاسترداد | كيف يعلم خادمك بالأمر | من يستطيع إيقاف التجديد |
|---|---|---|---|
| App Store | Apple | إشعار REFUND في App Store Server Notifications V2 | العميل، من إعدادات اشتراكات App Store أو من شاشة إدارة يفتحها تطبيقك |
| Google Play | Google خلال أول 48 ساعة، ثم أنت أو Google | Voided Purchases API وإشعارات المطور الفورية | العميل، أو أنت عبر purchases.subscriptionsv2.cancel |
| موقعك الإلكتروني | أنت | خطافات الويب لدى معالج الدفع الخاص بك | أنت |
كيف تلغي الوصول على كل منصة بعد الاسترداد
اربط كل عملية شراء من المتجر بحساب واحد
مطابقة الاسترداد مع شخص بعينه هي الجزء الصعب، لأن كل متجر يعرّف المشتري بطريقته. وكلاهما يوفر لك حقلًا لمعرّف حسابك الخاص. استخدمه في كل عملية شراء.
- على Apple، عيّن appAccountToken، وهو UUID تنشئه أنت، عند بدء عملية الشراء. يعيد App Store قيمة UUID نفسها في معلومات المعاملة والتجديد. وتقول Apple إنه يمكنك إعادة استخدام قيمة واحدة لكل المعاملات التي تخص العميل نفسه.
- إذا اشترى العميل خارج تطبيقك، كأن يستبدل رمز عرض في App Store، فلن تحتوي المعاملة على رمز. تضيف نقطة النهاية Set App Account Token رمزًا لها. وفي الاشتراك المتجدد تلقائيًا ينطبق ذلك على التجديد الحالي وما يليه، لا على المعاملات السابقة، ولا يعمل مع المشتريات المشتركة عبر Family Sharing.
- على Google Play، مرّر معرّف حساب مموّهًا عبر setObfuscatedAccountId عند تشغيل مسار الفوترة. حده الأقصى 64 حرفًا. وتقول Google إن البيانات الشخصية غير المشفرة مثل البريد الإلكتروني تؤدي إلى حظر المشتريات، وتوصي بالتشفير أو بتجزئة أحادية الاتجاه.
استمع إلى المتجرين، ثم اكتب استحقاقًا واحدًا
ترسل Apple إشعار REFUND عندما تسترد مبلغ أي نوع من المنتجات، بما فيها الاشتراكات المتجددة تلقائيًا. وترسل REFUND_REVERSED عندما تتراجع عن استرداد سبق أن منحته، بسبب نزاع أثاره العميل. وعلى Google Play، يسرد Voided Purchases API المشتريات المستردة والمشتريات التي خضعت لرد مبالغ مدفوعة، ولكل منها orderId يحدد عملية الشراء أو التجديد بدقة. ويرسل معالج الدفع على الويب حدث استرداد خاصًا به. ينبغي أن تصل الثلاثة إلى المعالج نفسه وأن تغيّر السجل نفسه.
ألغِ الاستحقاق، لا الحساب
الاسترداد يلغي عملية شراء، لا شخصًا. أزل الوصول الذي جاء من عملية الشراء المستردة، ثم أعد حساب ما يبقى للحساب. إذا كان لدى العميل أيضًا اشتراك نشط من متجر آخر، فإنه يحتفظ بالوصول من خلاله. وإن لم يكن، يفقد كل عميل الميزات المميزة في المرة التالية التي يتحقق فيها من خادمك.
عندما يشترك الشخص نفسه في متجرين
الاشتراكات المزدوجة هي النصف الآخر من المشكلة. يشترك شخص على Android، ثم يحصل على iPhone جديد، ولا يسجل الدخول، فيشترك مرة أخرى. أصبح الآن يدفع مرتين مقابل خدمة واحدة، وعادةً ما يتحول أحد هذين المبلغين إلى طلب استرداد. وقد لخّص فريق التجارة لدى Apple الأمر ببساطة في رده على مطور في Apple Developer Forums: ينبغي أن يتضمن نظام حسابات التطبيق منطقًا يمنع الشراء المكرر على منصة أخرى.
تحقق من كل متجر قبل عرض جدار الدفع
اجعل المستخدم يسجل الدخول قبل جدار الدفع، وابحث عن جميع مشترياته النشطة على خادمك، وتجاوز العرض إذا كان أي منها يغطي هذه المنصة. هذا التحقق الواحد يمنع معظم الرسوم المكررة قبل وقوعها.
أي عملية شراء أسترد إذا وقع التكرار بالفعل؟
استرد العملية التي تتحكم فيها. على Google Play يمكنك إصدار الاسترداد بنفسك في Play Console، ويوقف purchases.subscriptionsv2.cancel مع DEVELOPER_REQUESTED_STOP_PAYMENTS الدفعة التالية. واشتراكك على الويب يمكنك استرداده مباشرة. أما استردادات App Store فتقررها Apple، لذا إذا كان التكرار على iPhone، يطلب العميل الاسترداد من Apple، ويمكن لتطبيقك فتح هذا الطلب عبر واجهة طلب الاسترداد في StoreKit.
ما يكلفك استرداد لا يصل إلى إحدى المنصات
السعر المسترد ليس إلا الخسارة الأولى. العميل الذي لم يصل استرداد Apple الخاص به قط إلى تطبيقك على Android أو موقعك الإلكتروني يواصل استخدام ما تدفع أنت تكلفة تشغيله. كل جلسة لا تزال تستهلك موارد حوسبة. وكل ميزة ذكاء اصطناعي لا تزال تُجري استدعاءات لواجهات برمجة تابعة لجهات خارجية تُفوتر عليك. وملفاته لا تزال تشغل مساحة تخزين، وإذا كان تطبيقك يدفع للمبدعين مقابل كل مشاهدة أو استخدام، فإن تلك المدفوعات تستمر في الخروج. وفي الخطة السنوية، قد يعني ذلك عامًا كاملًا من تكاليف الخدمة لحساب لم يعد يدفع شيئًا.
ومسار البنك يزيد الأمر سوءًا. بالنسبة لطلبات Google Play المقدمة بعد 3 أغسطس 2026، تقول Google إنه عند قبول رد المبلغ المدفوع، يتحمل المطور سعر الشراء، مخصومًا منه رسوم خدمة Play، إضافة إلى رسوم رد المبالغ المدفوعة التي تفرضها المؤسسة المالية. ورد المبلغ نهائي لدى البنك. والعميل الذي استرد أمواله عبر البنك ولا يزال يملك الوصول قد كلّفك السعر والرسوم وتكلفة الخدمة دفعة واحدة.
| ما يستمر في العمل بعد إلغاء فائت | من يدفع ثمنه |
|---|---|
| موارد حوسبة الخادم لكل جلسة على Android أو الويب | أنت |
| استدعاءات واجهات برمجة الجهات الخارجية التي تجريها ميزاتك | أنت |
| تخزين ملفات المستخدم وسجله | أنت |
| المدفوعات للمبدعين مقابل كل استخدام أو مشاهدة | أنت |
| رسوم رد المبالغ المدفوعة على طلب Google Play بعد 3 أغسطس 2026 | أنت، فوق سعر الشراء مخصومًا منه رسوم خدمة Play |

الاستخدام عبر المنصات لا يزال دليلًا
يفيدك الحساب الواحد عبر المنصات أيضًا عندما يطلب منك متجر ما روايتك. تسأل معلومات الاستهلاك لدى Apple عن الجزء الذي استهلكه العميل من منتج قابل للاستهلاك أو غير قابل للاستهلاك أو اشتراك غير متجدد. أما الاشتراكات المتجددة تلقائيًا فلا ترسل لها نسبة مئوية، لأن Apple تحسبها من الوقت المنقضي. وتقبل مراجعة رد المبالغ المدفوعة في Google Play ما يصل إلى 1,000 حدث استخدام، ويمكن لكل منها أن يحمل معرّف الحساب المموّه. والاستخدام المسجل تحت معرّف حساب واحد، أيًّا كان الجهاز الذي أنتجه، هو استخدام يمكنك إثباته.
الاستردادات التي لا تطلب روايتك أبدًا
تُحسم معظم الاستردادات من دونك. قد تسترد Google Play مبلغ عملية شراء خلال 48 ساعة عبر مسار الاسترداد الخاص بها. واستردادات دعم المتجر، والمشتريات الملغاة، والاسترداد التلقائي الذي تجريه Google بعد نحو 72 ساعة للمشتريات التي لم تؤكد استلامها قط، كلها تحدث أولًا ثم يُبلَّغ عنها لاحقًا. وفي هذه الحالات، يمثل منطق الإلغاء الموضح أعلاه العمل كله.
مساران فقط يطلبان أدلة. يمنحك CONSUMPTION_REQUEST من Apple مهلة 12 ساعة لإرسال معلومات الاستهلاك. وتمنحك مراجعة رد المبالغ المدفوعة في Google Play مهلة 24 ساعة من PendingRefundReviewNotification للرد عبر orders.reviewrefund، ولا تسجل Google إلا استدعاءك الأول. يجيب RefundHalt عن الاثنين ضمن المهلة، مستخدمًا بيانات الاستخدام التي تجمعها بالفعل، والمربوطة بالحساب نفسه عبر تطبيقاتك.
قائمة تحقق قصيرة لاستردادات الاشتراكات متعددة المنصات
- عيّن appAccountToken على مشتريات Apple ومعرّف حساب مموّهًا على مشتريات Google Play.
- أكمل رموز Apple الناقصة عبر Set App Account Token لعمليات استبدال رموز العروض.
- وجّه REFUND وREFUND_REVERSED من Apple، والمشتريات الملغاة في Google Play، واستردادات الويب إلى معالج واحد.
- خزّن كل عملية شراء مع مصدرها، واحسب الوصول من جميع المشتريات النشطة.
- تحقق من مشتريات كل متجر قبل عرض جدار الدفع على أي منصة.
الأسئلة الشائعة
- هل يمكنني أن أتيح لمستخدمي iPhone الوصول إلى اشتراك اشتروه على Android أو على موقعي الإلكتروني؟
- نعم. تسمح App Review Guideline 3.1.3(b) من Apple للتطبيقات التي تعمل عبر منصات متعددة بأن تمنح المستخدمين الوصول إلى المحتوى أو الاشتراكات أو الميزات التي حصلوا عليها على منصات أخرى أو على موقعك الإلكتروني، بشرط أن تكون هذه العناصر متاحة أيضًا كمشتريات داخل تطبيق iPhone.
- إذا استردت Apple مبلغ أحد المشتركين، فهل يعلم Google Play أو نظام الفوترة على الويب بذلك؟
- لا. تُبلغ Apple خادمك عبر إشعار REFUND في App Store Server Notifications V2، ولا تُبلغ أحدًا غيره. وعلى خادمك أن يزيل الوصول الذي منحته عملية الشراء تلك على Android وعلى الويب وفي أي مكان آخر يسجّل فيه الحساب الدخول.
- كيف أطابق استرداد App Store مع حساب مستخدم؟
- استخدم appAccountToken، وهو UUID يرفقه تطبيقك بعملية الشراء، ويعيده App Store في معلومات المعاملة. وبالنسبة للمشتريات التي تتم خارج تطبيقك، مثل استبدال رمز عرض، تضيف نقطة النهاية Set App Account Token من Apple الرمز أو تستبدله. ولا تدعم معاملات Family Sharing.
- عميل مشترك على App Store وGoogle Play معًا. أيهما أسترد؟
- استرد الذي تتحكم فيه. يمكنك استرداد طلب Google Play في Play Console وإيقاف دفعته التالية عبر purchases.subscriptionsv2.cancel. أما استردادات App Store فتقررها Apple، لذا يمر التكرار على iPhone عبر طلب الاسترداد لدى Apple، الذي يمكن لتطبيقك فتحه عبر StoreKit.
- هل يُحتسب الاستخدام على موقعي الإلكتروني أو تطبيقي على Android دليلًا في مراجعة الاسترداد؟
- يمكن للاستخدام المسجل تحت حساب واحد أن يدعم ردك. تسأل معلومات الاستهلاك لدى Apple عن الجزء المستهلك من منتج قابل للاستهلاك أو غير قابل للاستهلاك أو اشتراك غير متجدد، وتقبل مراجعة رد المبالغ المدفوعة في Google Play ما يصل إلى 1,000 حدث استخدام يمكن أن تحمل معرّف الحساب المموّه.
المصادر وقراءات إضافية
- Apple: App Review Guidelines, 3.1.3(b) Multiplatform Services
- Apple Developer Documentation: Offering a subscription across multiple apps
- Apple Developer Documentation: Handling refund notifications
- Apple Developer Documentation: notificationType
- Apple Developer Documentation: Set App Account Token
- Android Developers: BillingFlowParams.Builder, setObfuscatedAccountId
- Google Play Developer API: purchases.voidedpurchases
- Google Play Console Help: Updates to refund protection and chargeback cost responsibility
RefundHalt
الطيار الآلي للاستردادات في App Store وGoogle Play
تابع القراءة
طلبات الاسترداد المفرطة قد تكلفك أكثر من المبالغ المستردة نفسها، لأن متجري التطبيقات يعدّانها مؤشرًا على الجودة
تذكر الإرشادات 5.6.4 من Apple طلبات الاسترداد المفرطة دليلًا على أن التطبيق لا يفي بمعايير الجودة، واتفاقية التوزيع من Google تسمح لها بإزالة تطبيقات المطورين الجدد بناءً على معدلات الاسترداد. إليك ما يقوله كل متجر، وكم تكلفك الإزالة، وكيف تبقى بعيدًا عن الخطر.
تحقّق من إشعارات خادم App Store قبل أن تتصرّف بناءً على استرداد، لأن أي شخص يستطيع الإرسال إلى عنوان webhook الخاص بك
إشعار الاسترداد ليس سوى طلب HTTPS إلى أن تتحقّق من توقيعه. إليك كيف تتحقّق من إشعارات خادم App Store ورسائل Google Play RTDN، وما الذي يوقّعه كل متجر، وما الذي يكلّفك إياه استرداد مزوّر أو مرفوض خطأً.