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

סקירה

web iOS API

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

לפיתוח האפליקציות!

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

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

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

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

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

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

הפעלת ממשקי API

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

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

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

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

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

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

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

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

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

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

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

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

טופסי כתובת

Android

iOS

אתרים

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

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

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

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

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

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

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

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

שיקולים בעת הטמעת השלמה אוטומטית של מקומות

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

  • בטופס ADDRESS, מגדירים את פרמטר הסוגים ל-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);
        }
    }

קבלת כינוי למקטע ורישום הקריאה החוזרת (callback)

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

  2. קוראים ל-method getMapAsync כדי להגדיר את הקריאה החוזרת במקטע.

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

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. לחלופין, אפשר לטעון מזהה מפה שהוגדר באמצעות עיצוב מבוסס-ענן למפות Google.

    @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();

אם המשתמש הזין את הכתובת באופן ידני או ביצע שינויים אחרי שההשלמה האוטומטית של המקום מילאה את השדות, אפשר להשתמש בשירות Android Geocoder או ב-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).

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

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

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

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

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

    // 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());
                    // ...
                });
    }

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

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

קודם כול, מתקינים את Maps SDK for Android Utility Library על ידי הוספת התלות הבאה לקובץ build.gradle של האפליקציה:

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.0'
}

לאחר מכן, חזרו לקובץ הפעילות לאחר איתור המיקום הידוע האחרון של המכשיר, והגדירו רדיוס במטרים כדי להתייחס לשני המיקומים כ "התאמה". הרדיוס צריך להיות גדול מספיק כדי להביא בחשבון את השונות ברמת הדיוק של ה-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, תוכלו להשתמש בהשלמה אוטומטית של מקומות באופן פרוגרמטי כדי להפעיל את ממשק המשתמש שאתם יוצרים באמצעות שירות ההשלמה האוטומטית של המקומות.