מדריך ליישום של הרשמה מאומתת במהירות

סקירה כללית

אינטרנט iOS API

הפלטפורמה של מפות Google זמינה לאינטרנט (JS,‏ TS), ל-Android ול-iOS, וגם מציעה ממשקי API לשירותי אינטרנט לקבלת מידע על מקומות, מסלולים ומרחקים. הדוגמאות במדריך הזה נכתבו לפלטפורמה אחת, אבל יש קישורים למסמכי עזרה להטמעה בפלטפורמות אחרות.

ליצירת האפליקציה

בעזרת Quick Builder במסוף Google Cloud תוכלו ליצור השלמה אוטומטית של טפסים לכתובות באמצעות ממשק משתמש אינטראקטיבי שיוצר בשבילכם קוד JavaScript.

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

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

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

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

בתרשים הבא מוצגים ממשקי ה-API המרכזיים שקשורים לפיתוח הפתרון (לחיצה להגדלה).

הפעלת ממשקי API

כדי ליישם את ההמלצות האלה, צריך להפעיל את ממשקי ה-API הבאים במסוף Google Cloud:

מידע נוסף על ההגדרה זמין במאמר תחילת העבודה עם הפלטפורמה של מפות Google.

קטעים של שיטות מומלצות

בהמשך מפורטות השיטות וההתאמות האישיות שנסקור בנושא הזה.

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

הוספת השלמה אוטומטית לשדות קלט

בדוגמה הזו נעשה שימוש ב-: Places SDK ל-Android האפשרויות הבאות זמינות גם כן: iOS | JavaScript

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

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

כשהמשתמש בוחר את תיבת ההזנה של ההשלמה האוטומטית ומתחיל להקליד, מופיעה רשימה של חיזויים של כתובות.

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

סרטונים: שיפור טופסי כתובות באמצעות השלמה אוטומטית של מקומות

טפסים של כתובות

Android

iOS

פיתוח אתרים

הפלטפורמה של מפות Google מספקת ווידג'ט של השלמה אוטומטית של מקומות לפלטפורמות לנייד ולאינטרנט. הווידג'ט, שמוצג בתמונות הקודמות, מספק תיבת דו-שיח לחיפוש עם פונקציונליות של השלמה אוטומטית מובנית, שאפשר גם לבצע לה אופטימיזציה לחיפוש ברמת המיקום.

בקטע הזה מוסבר איך מטמיעים את התכונה 'השלמה אוטומטית של מקומות' כדי לאפשר הרשמה מהירה ומאומתת.

הוספת הווידג'ט 'השלמה אוטומטית למקומות'

ב-Android, אפשר להוסיף את הווידג'ט של ההשלמה האוטומטית באמצעות כוונת השלמה אוטומטית שמפעילה את ההשלמה האוטומטית למקומות בשדה הקלט של שורה 1 בכתובת, שבו המשתמש יתחיל להזין את הכתובת שלו. כשהם יתחילו להקליד, הם יוכלו לבחור את הכתובת שלהם מרשימת התחזיות של ההשלמה האוטומטית.

קודם צריך להכין מפעיל פעילות באמצעות ActivityResultLauncher, שייחכה לתוצאה מהפעילות שהופעל. קריאת החזרה (callback) עם התוצאה תכיל אובייקט Place שתואם לכתובת שהמשתמש בחר מהתחזיות של ההשלמה האוטומטית.

    private final ActivityResultLauncher<Intent> startAutocomplete = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            result -> {
                if (result.getResultCode() == Activity.RESULT_OK) {
                    Intent intent = result.getData();
                    if (intent != null) {
                        Place place = Autocomplete.getPlaceFromIntent(intent);

                        // Write a method to read the address components from the Place
                        // and populate the form with the address components
                        Log.d(TAG, "Place: " + place.getAddressComponents());
                        fillInAddress(place);
                    }
                } else if (result.getResultCode() == Activity.RESULT_CANCELED) {
                    // The user canceled the operation.
                    Log.i(TAG, "User canceled autocomplete");
                }
            });

בשלב הבא מגדירים את מאפייני השדות, המיקום והסוג של הכוונה 'מילוי אוטומטי של מקום', ובונים אותה באמצעות Autocomplete.IntentBuilder. לבסוף, מפעילים את הכוונה באמצעות ActivityResultLauncher שהוגדר בדוגמת הקוד הקודמת.

    private void startAutocompleteIntent() {

        // Set the fields to specify which types of place data to
        // return after the user has made a selection.
        List<Place.Field> fields = Arrays.asList(Place.Field.ADDRESS_COMPONENTS,
                Place.Field.LAT_LNG, Place.Field.VIEWPORT);

        // Build the autocomplete intent with field, country, and type filters applied
        Intent intent = new Autocomplete.IntentBuilder(AutocompleteActivityMode.OVERLAY, fields)
                .setCountries(Arrays.asList("US"))
                .setTypesFilter(new ArrayList<String>() {{
                    add(TypeFilter.ADDRESS.toString().toLowerCase());
                }})
                .build(this);
        startAutocomplete.launch(intent);
    }

טיפול בכתובת שמוחזרת על ידי השלמה אוטומטית למקומות

הגדרת ActivityResultLauncher קודם לכן הגדירה גם מה צריך לעשות כשתוצאת הפעילות תוחזר בקריאה החוזרת. אם המשתמש בחר תחזית, היא תישלח בכוונה שמכיל אובייקט התוצאה. מכיוון שהכוונה נוצרה על ידי Autocomplete.IntentBuilder, השיטה Autocomplete.getPlaceFromIntent() יכולה לחלץ ממנה את אובייקט המקום.

    private final ActivityResultLauncher<Intent> startAutocomplete = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            result -> {
                if (result.getResultCode() == Activity.RESULT_OK) {
                    Intent intent = result.getData();
                    if (intent != null) {
                        Place place = Autocomplete.getPlaceFromIntent(intent);

                        // Write a method to read the address components from the Place
                        // and populate the form with the address components
                        Log.d(TAG, "Place: " + place.getAddressComponents());
                        fillInAddress(place);
                    }
                } else if (result.getResultCode() == Activity.RESULT_CANCELED) {
                    // The user canceled the operation.
                    Log.i(TAG, "User canceled autocomplete");
                }
            });

לאחר מכן, קוראים ל-Place.getAddressComponents() ומתאימים כל רכיב של הכתובת לשדה הקלט המתאים בטופס הכתובת, ומאכלסים את השדה בערך מהמקום שבחר המשתמש.

תיעוד נתוני הכתובת מהחיזוי במקום כתובת שהוזנה באופן ידני עוזר להבטיח את הדיוק של הכתובת, מוודא שהכתובת ידועה ואפשר לשלוח אליה הודעות, ומפחית את מספר הקשות המשתמש.

שיקולים כשמטמיעים את התכונה 'השלמה אוטומטית של מקומות'

יש כמה אפשרויות להטמעה של השלמה אוטומטית של מקומות, אם רוצים להשתמש בה יותר מהווידג'ט. אתם יכולים להשתמש בשילוב של שירותים כדי לקבל בדיוק את מה שאתם צריכים כדי להתאים מיקום בצורה נכונה.

  • בטופס ADDRESS, מגדירים את הפרמטר types לערך address כדי להגביל את ההתאמות לכתובות רחוב מלאות. מידע נוסף על הסוגים הנתמכים בבקשות להשלמה אוטומטית של מקומות

  • אם אתם לא צריכים לבצע חיפוש ברחבי העולם, תוכלו להגדיר את ההגבלות וההטיות המתאימות. יש כמה פרמטרים שאפשר להשתמש בהם כדי להטות או להגביל התאמה לאזורים ספציפיים בלבד.

    • משתמשים ב-RectangularBounds כדי להגדיר את גבולות המלבן שיגבילו את האזור, ומשתמשים ב-setLocationRestriction() כדי לוודא שיוחזר רק כתובות באזורים האלה.

    • אפשר להשתמש ב-setCountries() כדי להגביל את התשובות לקבוצה מסוימת של מדינות.

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

אימות חזותי של הכתובת

בדוגמה הזו נעשה שימוש ב-: SDK של מפות ל-Android האפשרויות הבאות זמינות גם כן: iOS | JavaScript

כחלק מהזנת הכתובת, כדאי לספק למשתמשים אישור חזותי של הכתובת במפה. כך המשתמשים יכולים להיות בטוחים שהכתובת נכונה.

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

הדוגמה הבאה מבוססת על השלבים הבסיסיים להוספת מפה ב-Android. פרטים נוספים זמינים במסמכי התיעוד.

הוספה של SupportMapFragment

קודם כול, מוסיפים קטע SupportMapFragment לקובץ ה-XML של הפריסה.

    <fragment
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:id="@+id/confirmation_map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

לאחר מכן, מוסיפים את הקוד של החלק באופן פרוגרמטי אם הוא עדיין לא קיים.

    private void showMap(Place place) {
        coordinates = place.getLatLng();

        // It isn't possible to set a fragment's id programmatically so we set a tag instead and
        // search for it using that.
        mapFragment = (SupportMapFragment)
                getSupportFragmentManager().findFragmentByTag(MAP_FRAGMENT_TAG);

        // We only create a fragment if it doesn't already exist.
        if (mapFragment == null) {
            mapPanel = ((ViewStub) findViewById(R.id.stub_map)).inflate();
            GoogleMapOptions mapOptions = new GoogleMapOptions();
            mapOptions.mapToolbarEnabled(false);

            // To programmatically add the map, we first create a SupportMapFragment.
            mapFragment = SupportMapFragment.newInstance(mapOptions);

            // Then we add it using a FragmentTransaction.
            getSupportFragmentManager()
                    .beginTransaction()
                    .add(R.id.confirmation_map, mapFragment, MAP_FRAGMENT_TAG)
                    .commit();
            mapFragment.getMapAsync(this);
        } else {
            updateMap(coordinates);
        }
    }

אחזור של ה-handle ל-fragment והרשמה של פונקציית ה-callback

  1. כדי לקבל אחיזה בחלק, צריך להפעיל את השיטה FragmentManager.findFragmentById ולהעביר לה את מזהה המשאב של החלק בקובץ הפריסה. אם הוספת את החלק באופן דינמי, אפשר לדלג על השלב הזה כי כבר אחזרתם את הכינוי.

  2. קוראים ל-method‏ getMapAsync כדי להגדיר את הפונקציה הלא סטטית להפעלה חוזרת (callback) בחלק.

לדוגמה, אם הוספתם את הקוד של ה-fragment באופן סטטי:

Kotlin



val mapFragment = supportFragmentManager
    .findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this)

      

Java


SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
    .findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

      

עיצוב והוספת סמן למפה

כשהמפה מוכנה, מגדירים את הסגנון, ממרכזים את המצלמה ומוסיפים סמן בקואורדינטות של הכתובת שהוזנה. הקוד הבא משתמש בסגנון שמוגדר באובייקט JSON. לחלופין, אפשר לטעון מזהה מפה שהוגדר באמצעות עיצוב מפות מבוסס-ענן.

    @Override
    public void onMapReady(@NonNull GoogleMap googleMap) {
        map = googleMap;
        try {
            // Customise the styling of the base map using a JSON object defined
            // in a string resource.
            boolean success = map.setMapStyle(
                    MapStyleOptions.loadRawResourceStyle(this, R.raw.style_json));

            if (!success) {
                Log.e(TAG, "Style parsing failed.");
            }
        } catch (Resources.NotFoundException e) {
            Log.e(TAG, "Can't find style. Error: ", e);
        }
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(coordinates, 15f));
        marker = map.addMarker(new MarkerOptions().position(coordinates));
    }

(הקוד המלא לדוגמה)

השבתת הפקדים במפה

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

השוואה בין הכתובת שהמשתמש הזין לבין מיקום המכשיר

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

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

התהליך של השוואת כתובת שהוזנה למיקום של המכשיר כולל את השלבים הבאים:

  1. המרת הכתובת שהמשתמש הזין לקואורדינטות גאוגרפיות.
  2. בקשה מהמשתמש להרשאה לקבל את המיקום של המכשיר שלו.
  3. חישוב המרחק בין הכתובת שהוזנה לבין מיקום המכשיר. אתם יכולים לקבוע את המרחק המקסימלי שצריך להיות בין הכתובת למיקום כדי שתהיה התאמה.

הדוגמה הבאה מראה איך אפשר לבקש מהמשתמשים להשוות בין הכתובת שהם הזינו לבין המיקום הנוכחי שלהם.

המרת הכתובת שהמשתמש הזין לקואורדינטות גיאוגרפיות

בדוגמה הזו נעשה שימוש ב-: Places SDK ל-Android האפשרות הזו זמינה גם: iOS | JavaScript | Geocoding API

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

אם המשתמש בחר את הכתובת באמצעות השלמה אוטומטית של מקומות, חשוב לבקש את הערך של Place.Field.LAT_LNG ברשימת השדות של השלמה אוטומטית של מקומות, כפי שמתואר בקטע הקוד הוספת הווידג'ט של השלמה אוטומטית של מקומות, ולקרוא ל-method‏ Place.getLatLng() כדי לקבל את הקואורדינטות הגיאוגרפיות של הכתובת שנבחרה.

coordinates = place.getLatLng();

אם המשתמש הזין את הכתובת באופן ידני או ביצע שינויים אחרי שהשדות התמלאו על ידי השלמה אוטומטית של מקומות, צריך להשתמש בשירות Geocoder של Android או ב-Geocoding API כדי לחפש את הקואורדינטות התואמות לכתובת הזו.

דוגמה

https://maps.googleapis.com/maps/api/geocode/json?address=1600%20Amphitheatre%2BParkway%2C%20Mountain%20View%2C%20CA%2094043&key=YOUR_API_KEY

חשוב לקידוד URL את הקריאה ל-Geocoding API.

מדריך מהיר לקידוד כתובות URL: %20 = רווח, %2B = + (פלוס), %2C = , (פסיק)

הצגת בקשה למשתמש לקבל הרשאה לקבל את המיקום של המכשיר שלו

כדי לקבל את המיקום של המכשיר של המשתמש, צריך לבקש מהמשתמש הרשאה להפעיל את שירותי המיקום. בהתאם להנחיות במסמכי העזרה של Android בנושא פיתוח אפליקציות שמזהות מיקום, מטמיעים את התהליך הבא:

  • שליחת בקשה להרשאת מיקום, כמתן הרשאה חד-פעמית, ברמה מדויקת (ACCESS_FINE_LOCATION).

  • אם המשתמש מעניק גישה למיקום, מקבלים את המיקום של המשתמש.

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

    "אם לא תאפשרו לאפליקציה לדעת מה המיקום המדויק שלכם, תצטרכו לבצע אימות בדואר כדי להפעיל את החשבון. [OK]"

באיור הבא מוצגת בקשה לדוגמה למתן הרשאה לקבלת המיקום של המכשיר.

כדי לבדוק אם יש הרשאת מיקום, צריך להכין מרכז הפעלה של פעילויות שיחכה לתוצאה מהפעילות שהופעל באמצעות ActivityResultLauncher. פונקציית ה-callback של התוצאה תכיל מחרוזת שמציינת אם המשתמש העניק או דחה את ההרשאה המבוקשת.

    // Register the permissions callback, which handles the user's response to the
    // system permissions dialog. Save the return value, an instance of
    // ActivityResultLauncher, as an instance variable.
    private final ActivityResultLauncher<String> requestPermissionLauncher =
            registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
                if (isGranted) {
                    // Since ACCESS_FINE_LOCATION is the only permission in this sample,
                    // run the location comparison task once permission is granted.
                    // Otherwise, check which permission is granted.
                    getAndCompareLocations();
                } else {
                    // Fallback behavior if user denies permission
                    Log.d(TAG, "User denied permission");
                }
            });

לאחר מכן, בודקים אם לאפליקציה כבר יש את ההרשאה ACCESS_FINE_LOCATION. אם לא, צריך לבקש מהמשתמש את ההרשאה על ידי הפעלת הפעילות של בקשת ההרשאה באמצעות מרכז האפליקציות שהוגדר בשלב הקודם.

    private void checkLocationPermissions() {
        if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
            getAndCompareLocations();
        } else {
            requestPermissionLauncher.launch(
                    ACCESS_FINE_LOCATION);
        }
    }

אחרי שמקבלים את ההרשאה ACCESS_FINE_LOCATION, משתמשים בספק המיקום הממוזג כדי לקבל את המיקום הידוע האחרון של המכשיר וליצור ממנו אובייקט LatLng.

        FusedLocationProviderClient fusedLocationClient =
                LocationServices.getFusedLocationProviderClient(this);

        fusedLocationClient.getLastLocation()
                .addOnSuccessListener(this, location -> {
                    // Got last known location. In some rare situations this can be null.
                    if (location == null) {
                        return;
                    }

                    deviceLocation = new LatLng(location.getLatitude(), location.getLongitude());
                    // ...
                });
    }

חישוב המרחק בין הכתובת שהוזנה לבין מיקום המכשיר

שימוש במתמטיקה כדי לחשב את המרחק בין שתי קואורדינטות של קו אורך/רוחב (הכתובת שהוזנה ומיקום המכשיר). ב-Maps SDK for Android Utility Library, ספריית השירותים בקוד פתוח, יש כמה שיטות שימושיות לחישוב המרחק הכדורי בין שתי נקודות בכדור הארץ.

קודם כול, מתקינים את ספריית התמיכה של SDK של מפות ל-Android על ידי הוספת התלות הבאה לקובץ build.gradle.kts של האפליקציה:

dependencies {


    // Utility Library for Maps SDK for Android
    // You do not need to add a separate dependency for the Maps SDK for Android
    // since this library builds in the compatible version of the Maps SDK.
    implementation("com.google.maps.android:android-maps-utils:3.8.2")
}

לאחר מכן, בקובץ הפעילות, אחרי שמקבלים את המיקום הידוע האחרון של המכשיר, מגדירים רדיוס במטרים כדי להתייחס לשני המיקומים כ'תואמים'. הרדיוס צריך להיות גדול מספיק כדי להביא בחשבון את השונות ברמת הדיוק של ה-GPS ואת גודל המקום בכתובת שהמשתמש הזין. לדוגמה:

private static final double acceptableProximity = 150;

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

// Use the computeDistanceBetween function in the Maps SDK for Android Utility Library
// to use spherical geometry to compute the distance between two Lat/Lng points.
double distanceInMeters = computeDistanceBetween(deviceLocation, enteredLocation);
if (distanceInMeters <= acceptedProximity) {
    Log.d(TAG, "location matched");
    // TODO: Display UI based on the locations matching
} else {
    Log.d(TAG, "location not matched");
    // TODO: Display UI based on the locations not matching
}

(הקוד המלא לדוגמה)

אם הכתובת והמיקום תואמים, מציגים באפליקציה אישור, כפי שמוצג באיור הבא.

טיפים לשיפור ההרשמה המהירה והמאומתת

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

מתאימים אישית את המראה והעיצוב של התיבה 'השלמה אוטומטית של מקומות' כך שתתאים לסגנון האתר. אם אתם מעדיפים לקבוע את המראה והתחושה של השלמה אוטומטית של מקומות באפליקציה שלכם במקום להשתמש בווידג'ט של Google, תוכלו להשתמש בהשלמה האוטומטית של מקומות באופן פרוגרמטי כדי להפעיל את ממשק המשתמש שאתם יוצרים באמצעות השירות 'השלמה אוטומטית של מקומות'.