معاملات قابل پرداخت

اگر قرارداد شما با Google صورت‌حساب را بر اساس هر تراکنش مشخص می‌کند، برنامه شما باید برای علامت‌گذاری شروع و پایان هر تراکنش، با NavigationTransactionRecorder.pickup() و NavigationTransactionRecorder.dropoff() تماس بگیرد تا Google بتواند تراکنش‌های قابل پرداخت را ردیابی و ثبت کند. برای تعیین نحوه تخصیص تراکنش های قابل پرداخت به سواری و تحویل، به دستورالعمل های اجرایی در این صفحه مراجعه کنید.

یک شی NavigationTransactionRecorder دریافت کنید

برای استفاده از متدهای pickup() و dropoff() ، ابتدا باید با فراخوانی NavigationApi.getTransactionRecorder یک نمونه از NavigationTransactionRecorder ایجاد کنید، همانطور که در مثال زیر نشان داده شده است:

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() یک شناسه تراکنش تصادفی و منحصر به فرد ایجاد کنید. شناسه تولید شده را در صورتی که سازمان شما برای تطبیق تراکنش‌های سواری به آن نیاز دارد، ذخیره کنید.

دستورالعمل های پیاده سازی برای ضبط تراکنش ناوبری

از دستورالعمل های زیر برای تعیین نحوه تخصیص تراکنش های قابل پرداخت به سواری و تحویل استفاده کنید.

دستورالعمل های عمومی:

  • هر زمان که Navigation SDK برای Android در حال استفاده است، باید تراکنش‌های قابل پرداخت را گزارش کنید، از جمله استفاده از ارائه‌دهنده موقعیت مکانی شناسایی شده، و حتی اگر برنامه برای یک سفر خاص در پیش‌زمینه نباشد. هنگامی که می‌خواهید گزارش تراکنش‌های قابل پرداخت را متوقف کنید، با فراخوانی () stopGuidance، ناوبری را غیرفعال کنید و با stopRequestingLocationUpdates() موقعیت مکانی را که از جاده جدا شده است خاموش کنید.
  • شما باید سواری‌ها و تحویل‌ها را به‌عنوان تراکنش‌های جداگانه و مستقل ثبت کنید، حتی اگر راننده هم سوار و هم تحویل را همزمان انجام دهد.
  • شما باید بلافاصله پس از وقوع رویداد، رویدادهای تحویل و رها را ضبط کنید.

دستورالعمل های معاملات سواری:

  • جلسات ناوبری که مسافر را شامل نمی شود (مثلاً رانندگی به یک نقطه وانت یا هدایت راننده به مکان محبوب برای وانت های آینده) به عنوان تراکنش های قابل پرداخت حساب نمی شود.
  • تحویل و تحویل یک مسافر به عنوان یک تراکنش قابل پرداخت حساب می شود.
  • سواری برای گروهی از مسافران که به صورت گروهی صورت‌حساب می‌شوند، به عنوان یک تراکنش قابل پرداخت حساب می‌شود. با جزئیات بیشتر: اگر راننده دو یا چند مسافر را در یک مکان سوار کند و آنها را در مکان دیگری پیاده کند، و شما آنها را به صورت گروهی صورتحساب کنید، این به عنوان یک تراکنش به حساب می آید. فقط یک بار pickup() dropoff() فقط یک بار با شناسه تراکنش مربوطه تماس بگیرید.
  • یک سفر مشترک برای دو مسافر با صورت‌حساب جداگانه به‌عنوان دو تراکنش قابل پرداخت حساب می‌شود، حتی اگر مسافران در همان مکان‌ها سوار و پیاده شوند. هنگامی که راننده مسافران را سوار می‌کند pickup() با هر دو شناسه تراکنش (یکی برای هر تراکنش) و زمانی که راننده مسافران را dropoff() می‌کند، با هر دو شناسه تراکنش تماس بگیرید.
  • توقف های اختیاری به عنوان تراکنش های جداگانه قابل پرداخت حساب نمی شوند. به عنوان مثال می توان به شکستن سفر برای برداشتن قهوه، یا پیاده کردن مسافری که جداگانه صورتحساب ندارد، اشاره کرد. برای توقف‌هایی مانند این حالت عادی dropoff() را فراخوانی نکنید.
  • اگر سازمان شما به‌جای صورت‌حساب در زمان سواری، برخی از سواری‌ها را به‌طور غیرمستقیم صورت‌حساب می‌دهد، باید با این سواری‌ها به گونه‌ای رفتار کنید که گویی صورت‌حساب به ازای هر سواری است. به عنوان مثال، سازمان شما ممکن است یک مدل اشتراک ماهانه برای سواری نامحدود ارائه دهد. برای این سواری ها، pickup() و dropoff() را فراخوانی کنید.
  • اگر سازمان شما خدمات اتوبوسی را ارائه می دهد که مسافران را در مجموعه ای ثابت از ایستگاه ها سوار و پیاده می کند، اما افرادی را که در هر ایستگاه وارد و خارج می شوند، پیگیری نمی کند، باید مجوز محصول جداگانه دریافت کنید. این نوع خدمات اتوبوسرانی خارج از محدوده صورتحساب هر تراکنش است.
  • اگر سازمان شما وسیله نقلیه ای را برای خدمات کرایه ای ارائه می دهد که به مسافر اجازه می دهد در مدت زمان طولانی توقف های نامحدود داشته باشد که همه به عنوان یک هزینه محاسبه می شود، باید مجوز محصول جداگانه دریافت کنید. این خدمات خارج از محدوده صورتحساب هر تراکنش است.

دستورالعمل معاملات تحویل:

  • جلسات ناوبری که شامل کالایی برای تحویل نمی‌شود (مثلاً رانندگی به فروشگاه برای تحویل گرفتن کالا) به عنوان تراکنش‌های قابل پرداخت حساب نمی‌شوند.
  • تحویل و تحویل سفارش از یک مکان واحد به عنوان یک تراکنش قابل پرداخت حساب می شود. یک سفارش ممکن است شامل چندین شی فیزیکی باشد - به عنوان مثال، دو کیسه مواد غذایی. هنگامی که راننده سفارش را دریافت می کند pickup() و زمانی که راننده سفارش را تحویل می دهد dropoff() فراخوانی کنید.
  • هنگامی که راننده اقلامی را از چندین مکان (مثلاً فروشگاه‌ها یا رستوران‌ها) به عنوان بخشی از یک سفارش تحویل می‌گیرد، هر مکان به عنوان یک تراکنش قابل پرداخت جداگانه به حساب می‌آید. برای هر مکان از یک شناسه تراکنش متفاوت استفاده کنید.
  • هنگامی که راننده اقلامی را برای سفارش‌های چند مشتری از یک مکان دریافت می‌کند، هر سفارش به عنوان یک تراکنش قابل پرداخت جداگانه حساب می‌شود. برای هر سفارش از یک شناسه تراکنش متفاوت استفاده کنید.
  • هنگامی که دو راننده به طور جداگانه اقلامی را به عنوان بخشی از یک سفارش مشتری تحویل می گیرند و تحویل می گیرند، تحویل هر راننده به عنوان یک تراکنش قابل پرداخت جداگانه محسوب می شود، حتی اگر اقلام از همان محل فروشگاه باشند. برای هر راننده از یک شناسه تراکنش متفاوت استفاده کنید.