Deewanالتوثيق

أسماء الحقول ورموز الأخطاء وأمثلة الشيفرة بالإنجليزية، كما تستخدمها في برنامجك.

Google وMicrosoft: الدخول والتقويمات

احصل على مفاتيح الدخول عبر Google وMicrosoft وتقويم Google وSheets وOutlook — للموقع والتطبيق.

هذا الدليل لمن يشغّل خادم ديوان. تطبيقا OAuth — واحد عند Google وآخر عند Microsoft — يفعّلان كل ما يلي على deewan.io وفي تطبيقي iOS وAndroid معًا. يستخدم التطبيق المفاتيح نفسها: يجري الدخول على خادمك، ثم تُعيد نافذة المتصفح الآمنة في الهاتف الجلسة إلى التطبيق عبر الرابط deewan://. لا يلزم شيء إضافي للجوال — باستثناء واحد: Expo Go (المستخدم أثناء التطوير) لا يستقبل ذلك الرابط، فتعرض الأزرار فيه شرحاً بدلاً من البدء. اختبر الدخول في نسخة تطوير أو في تطبيق المتجر.

الميزةيتطلبالصلاحيات المطلوبة
الدخول عبر Googleعميل OAuth من Googleopenid email profile
مزامنة تقويم Googleتفعيل Google Calendar APIcalendar.events (عند الربط)
تصدير الحضور إلى Google Sheetsتفعيل Sheets وDrive APIdrive.file (عند التصدير)
الدخول عبر Microsoftتسجيل تطبيق في Microsoft Entraopenid email profile offline_access User.Read
مزامنة تقويم Outlookتطبيق Microsoft نفسهCalendars.ReadWrite (عند الربط)

يطلب ديوان أقل ما يمكن: الدخول يطلب الهوية فقط، وصلاحيات التقويم وSheets تُطلب على حدة عندما يربطها المستخدم. وتُحفظ رموز التحديث مشفّرة (AES-256-GCM).

الربط يعرض دائماً شاشة موافقة Google. يستخدم الدخول اختيار الحساب فقط، أما ربط التقويم أو Sheets فيطلب موافقة Google في كل مرة: لا تمنح Google رمز التحديث إلا في تلك الشاشة، ومن دونه يعمل الربط ساعة ثم يتوقف. قد يرى المستخدم الشاشة مجدداً عند إعادة الربط — وهذا متوقَّع.

عند حدوث خطأ، يُخبَر المستخدم بالسبب. إن أعادت Google أو Microsoft أحداً مع خطأ — ألغى، أو الحساب مرتبط بحساب ديوان آخر، أو انتهت صلاحية الدخول، أو بريد العمل غير موثّق — يعرض ديوان السبب بلغته بدلاً من العودة إلى الصفحة بصمت. وتُظهر الأخطاء غير المعروفة رمزاً قصيراً يُذكر للدعم.

Google

  • افتح console.cloud.google.com وأنشئ مشروعًا (مثل «Deewan») واختره.
  • APIs & Services ← Library: فعّل Google Calendar API وGoogle Sheets API وGoogle Drive API.
  • Google Auth Platform ← Branding (شاشة الموافقة): اسم التطبيق Deewan، بريد الدعم، الشعار، الصفحة الرئيسية https://deewan.io، سياسة الخصوصية https://deewan.io/ar/privacy، الشروط https://deewan.io/ar/terms، النطاق المعتمد deewan.io، وبريد المطوّر.
  • Audience: نوع المستخدم External. أثناء الاختبار أضف حسابات Google الخاصة بك كمستخدمين تجريبيين.
  • Data access: أضف الصلاحيات openid و.../auth/userinfo.email و.../auth/userinfo.profile و.../auth/calendar.events و.../auth/drive.file.
  • Clients ← Create client ← Web application. المصدر المعتمد: https://deewan.io. عنوان إعادة التوجيه: https://deewan.io/api/auth/callback/google.
  • انسخ Client ID وClient secret إلى بيئة الخادم (أدناه).

إزالة تحذير «لم تتحقق Google من هذا التطبيق»

صلاحية calendar.events حساسة، لذا يظهر تحذير إلى أن تراجع Google التطبيق، ولا يربط التقويم إلا المستخدمون التجريبيون (أما الدخول نفسه فيعمل للجميع بعد نشر التطبيق). لإزالته:

  • أثبت ملكيتك لـ deewan.io في Google Search Console (سجل DNS من نوع TXT) بحساب Google نفسه المالك للمشروع.
  • تأكد أن الصفحة الرئيسية وسياسة الخصوصية والشروط تُفتح للعامة وتذكر ديوان، وأن سياسة الخصوصية تشرح استخدام بيانات Google (يستخدمها ديوان فقط لمزامنة اجتماعات الشخص نفسه وإنشاء الجداول التي يطلبها).
  • Audience ← Publish app (من «Testing» إلى «In production»).
  • Verification centre ← Prepare for verification: برّر كل صلاحية حساسة، وسجّل فيديو قصيرًا يعرض الدخول وشاشة الموافقة بالصلاحيات ومكان ظهور بيانات التقويم في ديوان.
  • أرسل الطلب. تستغرق المراجعة عادة من أيام إلى بضعة أسابيع، وقد تراسلك Google بأسئلة.

Microsoft (الدخول وOutlook)

  • افتح entra.microsoft.com ← Applications ← App registrations ← New registration.
  • الاسم Deewan. أنواع الحسابات: Accounts in any organizational directory and personal Microsoft accounts.
  • عنوان إعادة التوجيه: منصة Web، https://deewan.io/api/auth/callback/microsoft. ثم سجّل.
  • Certificates & secrets ← New client secret (24 شهرًا). انسخ Value فورًا — لا يظهر إلا هذه المرة. وضع تذكيرًا لاستبداله قبل انتهائه.
  • API permissions ← Add ← Microsoft Graph ← Delegated: openid وprofile وemail وoffline_access وUser.Read وCalendars.ReadWrite.
  • Token configuration ← Add optional claim ← ID: email وxms_edov وverified_primary_email وverified_secondary_email (فعّل صلاحية البريد في Microsoft Graph إن طُلب). يستخدمها ديوان ليعرف إن كانت Microsoft تضمن بريد العمل.
  • Branding & properties: الشعار، الصفحة الرئيسية https://deewan.io، روابط الشروط والخصوصية. وPublisher verification (برقم برنامج شركاء Microsoft) يزيل وسم «غير موثّق» من شاشة الموافقة.
  • انسخ Application (client) ID من Overview، وقيمة السر، إلى بيئة الخادم.

حسابات العمل والمدارس: يضبط مسؤول المؤسسة نفسها البريد الإلكتروني، لذا لا تضمنه Microsoft دائمًا. يقبل ديوان الدخول عبر Microsoft دليلًا على البريد فقط حين تضمنه Microsoft (الحسابات الشخصية، أو المطالبات الاختيارية أعلاه)؛ وإلا فلن يربطه بحساب ديوان موجود ولن ينشئ به حسابًا جديدًا. يسجّل هؤلاء ببريدهم ثم يربطون Microsoft من الإعدادات.

وضع المفاتيح على الخادم

متغيرات البيئة (لا تضعها في المستودع)
GOOGLE_CLIENT_ID=1234567890-abc.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=GOCSPX-…
MICROSOFT_CLIENT_ID=00000000-0000-0000-0000-000000000000
MICROSOFT_CLIENT_SECRET=…

أعد تشغيل الخادم (أو انشره من جديد). يظهر كل زر في الموقع والتطبيق فقط بعد وجود مفاتيحه — فالتطبيق يسأل الخادم عمّا هو مُعدّ. تحقق بـ curl https://deewan.io/api/mobile/providers.

حل المشكلات

ما يظهرالحل
redirect_uri_mismatch (Google) · AADSTS50011 (Microsoft)يجب أن يطابق العنوان تمامًا https://deewan.io/api/auth/callback/google أو …/microsoft — بلا شرطة في النهاية، وبـ https.
«لم تتحقق Google من هذا التطبيق»متوقَّع حتى إتمام التحقق (أعلاه). يستطيع المستخدمون التجريبيون المتابعة عبر «Advanced».
access_denied / «يتطلب موافقة المسؤول»مؤسسة الشخص تمنع التطبيقات الجديدة. يمنح مسؤول تقنية المعلومات الموافقة لديوان مرة واحدة للجميع.
الدخول عبر Microsoft يقول إن البريد غير مؤكَّدأضف المطالبات الاختيارية أعلاه؛ وإلا يسجّل هذا الحساب ببريده ثم يربط Microsoft.
توقفت مزامنة التقويم بعد أشهر (Microsoft)انتهت صلاحية السر. أنشئ سرًا جديدًا وحدّث MICROSOFT_CLIENT_SECRET.
«حساب Google هذا مرتبط بالفعل بحساب آخر في ديوان»ينتمي حساب Google هذا إلى دخول آخر في ديوان. سجّل الدخول هناك وافصله من الإعدادات ← التكاملات، ثم اربطه هنا — أو اختر حساب Google آخر.
التصدير إلى Sheets يطلب ربط Google مراراًلم يكن لربط Google رمز تحديث (أُنشئ قبل فرض الموافقة). اربطه مرة أخرى؛ وإن تكرر، احذف ديوان من myaccount.google.com/permissions ثم اربطه من جديد. وتأكد من تفعيل Google Sheets API.
«Sheets API has not been used / is disabled»فعّل Google Sheets API في مشروع Google Cloud نفسه، وانتظر بضع دقائق، ثم حاول مجدداً.
أزرار Google / Microsoft في التطبيق تعرض شرحاً بدلاً من البدءأنت في Expo Go. استخدم نسخة تطوير أو تطبيق المتجر.