עסקאות לחיוב

אם בחוזה שלכם עם Google מצוין חיוב לכל עסקה בנפרד, האפליקציה צריכה לקרוא ל-NavigationTransactionRecorder.pickup() ול-NavigationTransactionRecorder.dropoff() כדי לסמן את ההתחלה והסיום של כל עסקה, כדי ש-Google תוכל לעקוב אחרי עסקאות שניתנות לחיוב ולתעד אותן. אפשר להיעזר בהנחיות להטמעה בעמוד הזה כדי להחליט איך להקצות עסקאות שניתנות לחיוב לנסיעות ולמשלוחים.

אחזור של אובייקט NavigationTransactionRecorder

כדי להשתמש בשיטות pickup() ו-dropoff(), קודם צריך ליצור מכונה של NavigationTransactionRecorder על ידי קריאה ל-NavigationApi.getTransactionRecorder, כפי שמוצג בדוגמה הבאה:

NavigationTransactionRecorder transactionRecorder = NavigationApi.getTransactionRecorder(application);

התחלת עסקה עם pickup()

כשהנהג אוסף נוסע או אוסף פריט למשלוח, האפליקציה צריכה להתקשר אל NavigationTransactionRecorder.pickup(). יש להתחיל את השיחה כשהנהג יוצר אינטראקציה עם האפליקציה כדי לרשום את האיסוף. אין לבצע את השיחה הזו כחלק מהקריאה החוזרת (callback) של 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"));
  }
});

מעבירים את הפרמטרים הבאים ל-method pickup():

  • Waypoint שבו האיסוף מתבצע, או null אם האיסוף אינו חלק מסשן ניווט קיים.
  • לפחות מזהה עסקה אחד הרלוונטי לאיסוף הזה. מזהה עסקה הוא מחרוזת שרירותית שמזהה באופן ייחודי עסקה הניתנת לחיוב. מידע נוסף על מזהי עסקאות מופיע בהמשך.

סיום עסקה עם dropoff()

כשהנהג מוריד נוסע או שולח פריט, האפליקציה צריכה להתקשר אל NavigationTransactionRecorder.dropoff(). יש להתחיל את השיחה כשהנהג יוצר אינטראקציה עם האפליקציה כדי לתעד את הנטישה. אין לבצע את השיחה הזו כחלק מהקריאה החוזרת (callback) של 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"));
  }
});

מעבירים את הפרמטרים הבאים ל-method dropoff():

  • Waypoint שבו הנשירה מתרחשת או null אם הנשירה אינה חלק מסשן ניווט קיים.
  • מזהה עסקה אחד או יותר שחלים על הנשירה הזו. מזהה עסקה הוא מחרוזת שרירותית שמזהה באופן ייחודי עסקה הניתנת לחיוב. מידע נוסף על מזהי עסקאות מופיע בהמשך.

יש להשתמש במזהה עסקה משלך או ליצור מזהה עסקה

מזהה העסקה מאפשר לקשר נסיעה לעסקה לצורכי חיוב מ-Google. מזהה עסקה הוא מחרוזת שרירותית באורך מקסימלי של 64 תווים. המזהה צריך להיות ייחודי בכל העסקאות.

מומלץ לספק מזהה עסקה משלכם: מזהה שהמערכות שלכם כבר משתמשות בו ומאחסנות אותו.

לחלופין, אתם יכולים ליצור מזהה עסקה אקראי וייחודי באמצעות המספר NavigationTransactionRecorder.generateTransactionId(). שומרים את המזהה שנוצר למקרה שהארגון יצטרך אותו להתאמה של עסקאות נסיעה.

הנחיות ליישום לתיעוד הטרנזקציות של הניווט

ההנחיות הבאות יעזרו לכם לקבוע איך להקצות עסקאות שניתנות לחיוב לנסיעות ולמשלוחים.

הנחיות כלליות:

  • צריך לדווח על טרנזקציות שניתנות לחיוב בכל פעם שנעשה שימוש ב-Navigation SDK ל-Android, כולל שימוש בספק המיקום המוצמד לכביש, גם אם האפליקציה לא פועלת בחזית במהלך נסיעה ספציפית. אם רוצים להפסיק לדווח על טרנזקציות לחיוב, משביתים את הניווט על ידי קריאה ל-stopGuidance() ומשביתים את האפשרות 'מיקום מוצמד מהדרך' באמצעות stopRequestingLocationUpdates().
  • צריך לרשום נסיעות ומשלוחים כעסקאות נפרדות ועצמאיות, גם אם הנהג מבצע גם נסיעה וגם משלוח בו-זמנית.
  • עליכם לתעד אירועי איסוף והורדה מיד כשהאירוע מתרחש.

הנחיות לעסקאות של נסיעות:

  • פעילויות ניווט שלא כוללות נוסע (לדוגמה, נסיעה לנקודת איסוף או הפניית נהג למיקום פופולרי לאיסוףים עתידיים) לא נחשבות כעסקאות לחיוב.
  • האיסוף וההורדה של נוסע אחד נחשב כעסקה אחת לחיוב.
  • נסיעה לקבוצת נוסעים שמחויבים כקבוצה נספרת כעסקה אחת לחיוב. ליתר פירוט: אם הנהג אוסף שני נוסעים או יותר במיקום אחד ומוריד אותם במיקום אחר, והחיוב שלהם מתבצע כקבוצה, הדבר נחשב כעסקה אחת. התקשרות אל pickup() רק פעם אחת, ואל dropoff() רק פעם אחת, עם מזהה העסקה הרלוונטי.
  • נסיעה משותפת לשני נוסעים שמחויבים בנפרד נספרת כשתי עסקאות לחיוב, גם אם אוספים את הנוסעים ומשחררים אותם באותם מיקומים. צריך להתקשר למספר pickup() עם שני מזהי העסקאות (אחד לכל עסקה) כשהנהג אוסף את הנוסעים, ולהתקשר ל-dropoff() עם שני מזהי העסקאות כשהנהג מוריד את הנוסעים.
  • עצירות ביניים מושכלות לא נחשבות כעסקאות נפרדות לחיוב. לדוגמה: חלוקה של המסע לאיסוף קפה, או הורדת נוסע נוסף שלא חויב בנפרד. אל תקראו ל-dropoff() בעצירות עצירה כאלה כרגיל.
  • אם הארגון מחויב על חלק מהנסיעות באופן עקיף ולא באמצעות חיוב בזמן הנסיעה, צריך להתייחס לנסיעות האלה כאילו החיוב מתבצע על כל נסיעה. לדוגמה, הארגון עשוי לספק מודל מינויים חודשי לנסיעות ללא הגבלה. צריך להתקשר אל pickup() ואל dropoff() לנסיעות האלה.
  • אם הארגון שלכם מספק שירותי אוטובוסים, שאוספים ומורידים נוסעים בתחנה קבועה של תחנות, אבל לא עוקבים אחרי האנשים שנכנסים ויוצאים בכל תחנה, עליכם לקבל רישיון מוצר נפרד. סוגי שירותי האוטובוסים האלה לא נכללים בחיוב על כל עסקה.
  • אם הארגון שלכם מספק שירותי רכב להשכרה שמאפשרים לנוסע לבצע עצירות ללא הגבלה לאורך תקופה ממושכת ומחויב בעמלה אחת, עליכם לקבל רישיון נפרד למוצר. השירותים האלה לא נכללים בחיוב על כל עסקה.

הנחיות לעסקאות מסירה:

  • סשנים של ניווט שלא כוללים פריט למשלוח (לדוגמה, נסיעה לחנות לאיסוף סחורה) לא נחשבים לעסקאות לחיוב.
  • האיסוף וההחזרה של הזמנה ממיקום יחיד נחשב כעסקה אחת לחיוב. הזמנה יכולה לכלול כמה פריטים פיזיים, לדוגמה, שתי שקיות של מוצרי מכולת. יש להתקשר אל pickup() כשהנהג אוסף את ההזמנה, ואל dropoff() כשהנהג מסיר את ההזמנה.
  • כשנהג אוסף פריטים מכמה מיקומים (לדוגמה, חנויות או מסעדות) במסגרת אותה הזמנה, כל מיקום נחשב כעסקה נפרדת לחיוב. צריך להשתמש במזהה עסקה שונה לכל מיקום.
  • כשנהג אוסף פריטים בהזמנות של כמה לקוחות מאותו מיקום, כל הזמנה נחשבת כעסקה נפרדת לחיוב. משתמשים במזהה עסקה שונה לכל הזמנה.
  • כששני נהגים אוספים ומורידים פריטים בנפרד במסגרת אותה הזמנת לקוח, המשלוח של כל נהג נחשב כעסקה נפרדת לחיוב, גם אם הפריטים הם מאותו מיקום של החנות. השתמשו במזהה עסקה שונה לכל נהג.