المعاملات القابلة للفوترة

إذا كان عقدك مع Google يحدد الفوترة على أساس كل معاملة، يجب أن يطلب تطبيقك NavigationTransactionRecorder.pickup() وNavigationTransactionRecorder.dropoff() لتحديد بداية ونهاية كل معاملة، حتى تتمكّن Google من تتبُّع المعاملات القابلة للفوترة وتسجيلها. ما عليك سوى الرجوع إلى إرشادات التنفيذ في هذه الصفحة لتحديد كيفية تخصيص معاملات قابلة للفوترة تخص الرحلات وعمليات التسليم.

الحصول على عنصر "NavigationTransactionRecorder"

لاستخدام طريقتَي pickup() وdropoff()، يجب أولاً إنشاء مثيل NavigationTransactionRecorder من خلال استدعاء NavigationApi.getTransactionRecorder، كما هو موضّح في المثال التالي:

NavigationTransactionRecorder transactionRecorder = NavigationApi.getTransactionRecorder(application);

بدء معاملة مع "pickup()"

عندما يحضر السائق أحد الراكبين أو ي استلامه لتوصيله، يجب أن يتصل طلبك بالرقم NavigationTransactionRecorder.pickup(). يجب عليك بدء هذه المكالمة عندما يتفاعل السائق مع تطبيقك لتسجيل استلام الطلب. يُرجى عدم إجراء هذه المكالمة كجزء من معاودة الاتصال بـ onArrival().

يفترض الرمز النموذجي التالي أن السائق ينقر على زر في واجهة مستخدم تطبيقك عند استلام راكب أو عنصر توصيل:

Button b = (Button) findViewById(R.id.btn_pickup);
b.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    transactionRecorder.pickup(
        null /* waypoint */,
        Arrays.asList("MY_TRANSACTION_ID"));
  }
});

مرِّر المَعلمات التالية إلى الطريقة pickup():

  • تمثّل هذه السمة Waypoint التي يتم فيها استلام الطلب، أو null إذا لم يكن وقت الاستلام جزءًا من جلسة تنقّل حالية.
  • معرّف واحد أو أكثر للمعاملات الذي ينطبق على عملية استلام الطلب هذه. معرِّف المعاملة هو سلسلة عشوائية تعرِّف المعاملة القابلة للفوترة بشكل فريد. يمكنك الاطّلاع على مزيد من المعلومات حول معرّفات المعاملات أدناه.

إنهاء معاملة مع "dropoff()"

عندما ينزل السائق أحد الركاب أو يسلم سلعة، يجب أن يتصل طلبك برقم NavigationTransactionRecorder.dropoff(). يجب أن تبدأ هذه المكالمة عندما يتفاعل السائق مع تطبيقك لتسجيل الانسحاب. يُرجى عدم إجراء هذه المكالمة كجزء من معاودة الاتصال بـ onArrival().

يفترض الرمز النموذجي التالي أن السائق ينقر على زر في واجهة مستخدم تطبيقك عند تسليم راكب أو عنصر توصيل:

Waypoint waypoint = mNavigator.getCurrentRouteSegment().getDestinationWaypoint();

Button b = (Button) findViewById(R.id.btn_dropoff);
b.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    transactionRecorder.dropoff(
        waypoint,
        Arrays.asList("MY_TRANSACTION_ID"));
  }
});

مرِّر المَعلمات التالية إلى الطريقة dropoff():

  • Waypoint التي يحدث فيها الانسحاب، أو null إذا لم يكن الانسحاب جزءًا من جلسة تنقُّل حالية.
  • معرّف واحد أو أكثر للمعاملات التي تنطبق على هذا التسليم. معرِّف المعاملة هو سلسلة عشوائية تعرِّف المعاملة القابلة للفوترة بشكل فريد. يمكنك الاطّلاع على مزيد من المعلومات حول معرّفات المعاملات أدناه.

استخدِم معرِّف المعاملة الخاص بك أو أنشئ معرِّفًا.

يوفّر معرِّف المعاملة طريقة لربط رحلة بمعاملة فوترة من Google. معرِّف المعاملة هو سلسلة عشوائية لا يزيد طولها عن 64 حرفًا. يجب أن يكون المعرّف فريدًا في جميع المعاملات.

من الأفضل تقديم معرِّف المعاملة الخاص بك، أي معرّف تستخدمه أنظمتك وتخزّنه حاليًا.

يمكنك بدلاً من ذلك إنشاء معرِّف معاملة فريد وعشوائي من خلال طلب الرقم NavigationTransactionRecorder.generateTransactionId(). يمكنك تخزين المعرّف الذي تم إنشاؤه إذا احتاجت إليه مؤسستك لتسوية معاملات الرحلات.

إرشادات التنفيذ الخاصة بسجل معاملات التنقل

استخدم الإرشادات التالية لتحديد كيفية تخصيص المعاملات القابلة للفوترة للرحلات والتسليم.

إرشادات عامة:

  • يجب عليك الإبلاغ عن المعاملات القابلة للفوترة كلما كانت حزمة SDK للتنقل في نظام التشغيل Android قيد الاستخدام، بما في ذلك الاستعانة بموفِّر الموقع الذي تم التقاطه على الطريق، وحتى إذا لم يكن التطبيق في مقدّمة رحلة محددة. عندما تريد إيقاف الإبلاغ عن المعاملات القابلة للفوترة، يمكنك إيقاف التنقّل عن طريق طلب stopGuidance() وإيقاف الموقع الجغرافي الذي تم التقاطه على الطريق باستخدام stopRequestingLocationUpdates().
  • يجب عليك تسجيل الرحلات والتسليمات كمعاملات منفصلة ومستقلة، حتى إذا قام السائق بإجراء عملية توصيل وتوصيل في نفس الوقت.
  • يجب تسجيل أحداث الاستلام والتسليم على الفور عند وقوع الحدث.

إرشادات حول معاملات الرحلات:

  • لا يتم احتساب جلسات التنقل التي لا تشمل راكبًا (على سبيل المثال، القيادة إلى نقطة استلام أو توجيه سائق إلى موقع شهير لاستلامه في المستقبل) كمعاملات قابلة للفوترة.
  • يتم احتساب عملية استلام وتسليم راكب واحد كمعاملة واحدة قابلة للفوترة.
  • تُحتسب رحلة لمجموعة من الركاب كمجموعة ركاب معاملة واحدة قابلة للفوترة. مزيد من التفاصيل: إذا نقل السائق راكبين أو أكثر في موقع جغرافي ما ونقلهم إلى موقع جغرافي آخر، وصدرت فاتورة لهم كمجموعة، فإن ذلك يُحتسب كمعاملة واحدة. يمكنك الاتصال بـ pickup() مرة واحدة فقط، وdropoff() مرة واحدة فقط، مع معرّف المعاملة ذي الصلة.
  • تُحتسب الرحلة المشتركة لراكبَين راكبَين منفصلَين كمعاملتَين قابلتَين للفوترة، حتى إذا تم نقل الركاب وتسليمهم في المواقع الجغرافية نفسها. اتصل برقم pickup() مع كلا معرّفَي المعاملات (واحد لكل معاملة) عندما يجلب السائق الركاب، واتصل برقم dropoff() مع كلا معرّفَي المعاملات عندما ينسحب السائق الركاب.
  • ولا يتم احتساب محطات التوقف التقديرية كمعاملات منفصلة قابلة للفوترة. وتشمل الأمثلة كسر الرحلة لتناول القهوة أو تسليم راكب مساعِد لا يتم تحصيل رسومه بشكل منفصل. يجب عدم استدعاء dropoff() لمحطات توقف مثل هذه كالمعتاد.
  • إذا كانت مؤسستك تحصّل رسوم بعض الرحلات بشكل غير مباشر بدلاً من الفوترة في وقت الرحلة، عليك التعامل مع هذه الرحلات كما لو كانت الفوترة لكل رحلة. على سبيل المثال، قد توفر مؤسستك نموذج اشتراك شهري لعدد غير محدود من الرحلات. اتصل بـ pickup() وdropoff() للحصول على هذه الرحلات.
  • إذا كانت مؤسستك توفر خدمات الحافلات التي تستقل الركّاب في مجموعة ثابتة من المحطات ولكن لا تتبع الأفراد الذين يدخلون ويخرجون في كل محطة، يجب عليك الحصول على ترخيص منفصل للمنتج. تقع هذه الأنواع من خدمات الحافلات خارج نطاق الفوترة لكل معاملة.
  • إذا كانت مؤسستك تقدم مركبة لخدمات تأجير تتيح للراكب التوقف بلا حدود خلال فترة زمنية طويلة يتم تحرير فواتيرها كرسوم واحدة، يجب عليك الحصول على ترخيص منتج منفصل. تقع هذه الخدمات خارج نطاق الفوترة لكل معاملة.

إرشادات حول معاملات التسليم:

  • لا يتم احتساب جلسات التنقل التي لا تتضمن عنصرًا للتسليم (على سبيل المثال، القيادة إلى متجر لاستلام البضائع ليتم تسليمها) كمعاملات قابلة للفوترة.
  • يتم احتساب استلام الطلبات من موقع جغرافي واحد وتسليمها كمعاملة واحدة قابلة للفوترة. قد يتضمن الطلب أغراضًا مادية متعددة - على سبيل المثال، حقيبتان من البقالة. اتصل بـ pickup() عندما يلتقط السائق الطلب، وdropoff() عندما يسلِّم السائق الطلب.
  • عندما يلتقط السائق عناصر من مواقع متعددة (على سبيل المثال، المتاجر أو المطاعم) كجزء من الطلب نفسه، يتم احتساب كل موقع كمعاملة منفصلة قابلة للفوترة. استخدِم معرِّف معاملة مختلفًا لكل موقع جغرافي
  • عندما يختار السائق استلام عناصر من طلبات عدة عملاء من الموقع نفسه، يتم احتساب كل طلب كمعاملة منفصلة قابلة للفوترة. استخدم معرِّف معاملة مختلفًا لكل طلب.
  • عندما يقوم سائقان باستلام العناصر وتسليمها بشكل منفصل كجزء من طلب العميل نفسه، يتم احتساب عملية تسليم كل سائق كمعاملة منفصلة قابلة للفوترة، حتى إذا كانت الأصناف من موقع المتجر نفسه. استخدِم معرِّف معاملة مختلفًا لكل سائق.