יצירת גבולות וירטואליים ומעקב אחריהם

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

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

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

הערה: במכשירי Wear, ממשקי ה-API של Geofencing לא משתמשים ביעילות חשמל. אנחנו לא ממליצים על ממשקי ה-API האלה ב-Wear. נקראו לחסוך בסוללה ובסוללה לקבלת מידע נוסף.

הגדרה למעקב אחר גבולות וירטואליים

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

אפשר לקרוא מידע נוסף במדריך לבקש הרשאות מיקום.

אם רוצים להשתמש ב-BroadcastReceiver כדי להאזין למעברים בגבולות וירטואליים, צריך להוסיף רכיב שמציין את שם השירות. הרכיב הזה חייב להיות צאצא של הרכיב <application>:

<application
   android:allowBackup="true">
   ...
   <receiver android:name=".GeofenceBroadcastReceiver"/>
<application/>

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

Kotlin

lateinit var geofencingClient: GeofencingClient

override fun onCreate(savedInstanceState: Bundle?) {
    // ...
    geofencingClient = LocationServices.getGeofencingClient(this)
}

Java

private GeofencingClient geofencingClient;

@Override
public void onCreate(Bundle savedInstanceState) {
    // ...
    geofencingClient = LocationServices.getGeofencingClient(this);
}

יצירה והוספה של גבולות וירטואליים

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

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

יצירת אובייקטים בגבולות וירטואליים

קודם כול, צריך להשתמש ב- Geofence.Builder כדי ליצור גבולות וירטואליים ולהגדיר את הרדיוס, משך הזמן וטווחי הזמן הרצויים לגבול הווירטואלי. לדוגמה, כדי לאכלס אובייקט ברשימה:

Kotlin

geofenceList.add(Geofence.Builder()
        // Set the request ID of the geofence. This is a string to identify this
        // geofence.
        .setRequestId(entry.key)

        // Set the circular region of this geofence.
        .setCircularRegion(
                entry.value.latitude,
                entry.value.longitude,
                Constants.GEOFENCE_RADIUS_IN_METERS
        )

        // Set the expiration duration of the geofence. This geofence gets automatically
        // removed after this period of time.
        .setExpirationDuration(Constants.GEOFENCE_EXPIRATION_IN_MILLISECONDS)

        // Set the transition types of interest. Alerts are only generated for these
        // transition. We track entry and exit transitions in this sample.
        .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER or Geofence.GEOFENCE_TRANSITION_EXIT)

        // Create the geofence.
        .build())

Java

geofenceList.add(new Geofence.Builder()
    // Set the request ID of the geofence. This is a string to identify this
    // geofence.
    .setRequestId(entry.getKey())

    .setCircularRegion(
            entry.getValue().latitude,
            entry.getValue().longitude,
            Constants.GEOFENCE_RADIUS_IN_METERS
    )
    .setExpirationDuration(Constants.GEOFENCE_EXPIRATION_IN_MILLISECONDS)
    .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER |
            Geofence.GEOFENCE_TRANSITION_EXIT)
    .build());

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

ציון גבולות וירטואליים וטריגרים ראשוניים

קטע הקוד הבא משתמש במחלקה GeofencingRequest ואת המחלקה GeofencingRequestBuilder המקננת, לציין את הגבולות הווירטואליים למעקב ולהגדיר את האופן שבו אירועי גבולות וירטואליים מופעלים:

Kotlin

private fun getGeofencingRequest(): GeofencingRequest {
    return GeofencingRequest.Builder().apply {
        setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER)
        addGeofences(geofenceList)
    }.build()
}

Java

private GeofencingRequest getGeofencingRequest() {
    GeofencingRequest.Builder builder = new GeofencingRequest.Builder();
    builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER);
    builder.addGeofences(geofenceList);
    return builder.build();
}

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

במקרים רבים עדיף להשתמש במקום זאת ב- INITIAL_TRIGGER_DWELL, שמפעיל אירועים רק כשהמשתמש עוצר לפרק זמן מוגדר בתוך גבולות וירטואליים. הגישה הזו יכולה לעזור להפחית את כמות ההתראות על ספאם כתוצאה מהתראות על מספרים גדולים, המכשיר נכנס לגבולות וירטואליים ויוצא מהם לזמן קצר. אסטרטגיה נוספת לקבלת התוצאות הטובות ביותר הגדרת גבולות וירטואליים היא רדיוס מינימלי של 100 מטר. כך אנחנו מביאים בחשבון את רמת הדיוק של המיקום של רשתות Wi-Fi טיפוסיות, וגם מסייע בהפחתת צריכת החשמל במכשיר.

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

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

בקטע הקוד הבא מוסבר איך כדי להגדיר PendingIntent שמתחיל ב-BroadcastReceiver:

Kotlin

class MainActivity : AppCompatActivity() {

    // ...

    private val geofencePendingIntent: PendingIntent by lazy {
        val intent = Intent(this, GeofenceBroadcastReceiver::class.java)
        // We use FLAG_UPDATE_CURRENT so that we get the same pending intent back when calling
        // addGeofences() and removeGeofences().
        PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
    }
}

Java

public class MainActivity extends AppCompatActivity {

    // ...

    private PendingIntent getGeofencePendingIntent() {
        // Reuse the PendingIntent if we already have it.
        if (geofencePendingIntent != null) {
            return geofencePendingIntent;
        }
        Intent intent = new Intent(this, GeofenceBroadcastReceiver.class);
        // We use FLAG_UPDATE_CURRENT so that we get the same pending intent back when
        // calling addGeofences() and removeGeofences().
        geofencePendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.
                FLAG_UPDATE_CURRENT);
        return geofencePendingIntent;
    }

הוספת גבולות וירטואליים

כדי להוסיף גבולות וירטואליים, צריך להשתמש בשיטה GeofencingClient.addGeofences(). מספקים את האובייקט GeofencingRequest ואת PendingIntent. קטע הקוד הבא מדגים את עיבוד התוצאות:

Kotlin

geofencingClient?.addGeofences(getGeofencingRequest(), geofencePendingIntent)?.run {
    addOnSuccessListener {
        // Geofences added
        // ...
    }
    addOnFailureListener {
        // Failed to add geofences
        // ...
    }
}

Java

geofencingClient.addGeofences(getGeofencingRequest(), getGeofencePendingIntent())
        .addOnSuccessListener(this, new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                // Geofences added
                // ...
            }
        })
        .addOnFailureListener(this, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                // Failed to add geofences
                // ...
            }
        });

איך מתמודדים עם מעברים בגבולות וירטואליים

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

הערה: ב-Android מגרסה 8.0 (רמת API 26) ואילך, אם יש אפליקציה פועלת ברקע תוך כדי מעקב אחר גבולות וירטואליים, אז המכשיר מגיב לאירועים של הגדרת גבולות וירטואליים כל כמה דקות. כדי ללמוד איך לבצע התאמות לאפליקציה שלכם למגבלות התגובות האלה, רקע מגבלות מיקום.

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

Kotlin

class GeofenceBroadcastReceiver : BroadcastReceiver() {
    // ...
    override fun onReceive(context: Context?, intent: Intent?) {
        val geofencingEvent = GeofencingEvent.fromIntent(intent)
        if (geofencingEvent.hasError()) {
            val errorMessage = GeofenceStatusCodes
                    .getStatusCodeString(geofencingEvent.errorCode)
            Log.e(TAG, errorMessage)
            return
        }

        // Get the transition type.
        val geofenceTransition = geofencingEvent.geofenceTransition

        // Test that the reported transition was of interest.
        if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER |
                geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) {

            // Get the geofences that were triggered. A single event can trigger
            // multiple geofences.
            val triggeringGeofences = geofencingEvent.triggeringGeofences

            // Get the transition details as a String.
            val geofenceTransitionDetails = getGeofenceTransitionDetails(
                    this,
                    geofenceTransition,
                    triggeringGeofences
            )

            // Send notification and log the transition details.
            sendNotification(geofenceTransitionDetails)
            Log.i(TAG, geofenceTransitionDetails)
        } else {
            // Log the error.
            Log.e(TAG, getString(R.string.geofence_transition_invalid_type,
                    geofenceTransition))
        }
    }
}

Java

public class GeofenceBroadcastReceiver extends BroadcastReceiver {
    // ...
    protected void onReceive(Context context, Intent intent) {
        GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent);
        if (geofencingEvent.hasError()) {
            String errorMessage = GeofenceStatusCodes
                    .getStatusCodeString(geofencingEvent.getErrorCode());
            Log.e(TAG, errorMessage);
            return;
        }

        // Get the transition type.
        int geofenceTransition = geofencingEvent.getGeofenceTransition();

        // Test that the reported transition was of interest.
        if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER ||
                geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) {

            // Get the geofences that were triggered. A single event can trigger
            // multiple geofences.
            List<Geofence> triggeringGeofences = geofencingEvent.getTriggeringGeofences();

            // Get the transition details as a String.
            String geofenceTransitionDetails = getGeofenceTransitionDetails(
                    this,
                    geofenceTransition,
                    triggeringGeofences
            );

            // Send notification and log the transition details.
            sendNotification(geofenceTransitionDetails);
            Log.i(TAG, geofenceTransitionDetails);
        } else {
            // Log the error.
            Log.e(TAG, getString(R.string.geofence_transition_invalid_type,
                    geofenceTransition));
        }
    }
}

אחרי זיהוי אירוע המעבר דרך PendingIntent, BroadcastReceiver מקבל את סוג המעבר לגבולות וירטואליים בודקת אם זה אחד מהאירועים שהאפליקציה משתמשת בהם כדי להפעיל התראות - GEOFENCE_TRANSITION_ENTER או GEOFENCE_TRANSITION_EXIT במקרה הזה. לאחר מכן השירות שולח התראה ורושם ביומן את פרטי המעבר.

הפסקת המעקב אחר גבולות וירטואליים

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

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

Kotlin

geofencingClient?.removeGeofences(geofencePendingIntent)?.run {
    addOnSuccessListener {
        // Geofences removed
        // ...
    }
    addOnFailureListener {
        // Failed to remove geofences
        // ...
    }
}

Java

geofencingClient.removeGeofences(getGeofencePendingIntent())
        .addOnSuccessListener(this, new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                // Geofences removed
                // ...
            }
        })
        .addOnFailureListener(this, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                // Failed to remove geofences
                // ...
            }
        });

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

שימוש בשיטות מומלצות לגבולות וירטואליים

בקטע הזה מפורטות המלצות לשימוש בגבולות וירטואליים במיקום ממשקי API ל-Android.

הפחתה של צריכת האנרגיה

אתם יכולים להשתמש בשיטות הבאות לאופטימיזציה של צריכת החשמל באפליקציות שמשתמשות בגבולות וירטואליים:

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

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

בחירת הרדיוס האופטימלי לגבולות הווירטואליים

לקבלת התוצאות הטובות ביותר, מומלץ להגדיר רדיוס של 100-150 מטר לפחות. כשחיבור ה-Wi-Fi זמין, הדיוק של המיקום הוא בדרך כלל בין 20 ל-50 מטרים. כשנמצאים בפנים אם המיקום זמין, טווח הדיוק יכול להיות עד 5 מטרים. אלא אם אין לך ידע בפנים זמין בתוך הגבול הווירטואלי, נניח שרמת הדיוק של מיקום Wi-Fi היא 50 מטרים.

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

צריך להסביר למשתמשים למה האפליקציה שלך משתמשת בגבולות וירטואליים

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

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

שימוש בסוג המעבר 'תושבות' כדי להפחית את ההתראות על ספאם

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

רישום מחדש של גבולות וירטואליים רק בעת הצורך

הגבולות הווירטואליים הרשומים נשמרים בתהליך com.google.process.location בבעלות חבילת com.google.android.gms. האפליקציה לא צריכה לעשות דבר כדי לטפל באירועים הבאים, כי המערכת משחזרת גבולות וירטואליים אחרי האירועים האלה:

  • שירותי Google Play שודרגו.
  • מערכת Google Play Services מפסיקה לפעול ומופעלת מחדש על ידי המערכת עקב הגבלת משאבים.
  • תהליך המיקום קורס.

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

  • המכשיר הופעל מחדש. האפליקציה צריכה להאזין לפעולת ההפעלה של המכשיר הושלמה, ואז שוב- לרשום את הגבולות הגיאוגרפיים הנדרשים.
  • האפליקציה תוסר ותותקן מחדש.
  • נתוני האפליקציה ימחקו.
  • הנתונים של Google Play Services נמחקו.
  • האפליקציה קיבלה GEOFENCE_NOT_AVAILABLE התראה. זה קורה בדרך כלל לאחר השבתת NLP (ספק המיקום ברשת של Android).

פתרון בעיות באירוע של הכניסה לגבולות וירטואליים

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

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

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

    הערה: אם האפליקציה מטרגטת את Android 10 (רמת API 29) או גבוהה יותר, אין אפשרות להתקשר ישירות אל WifiManager.setEnabled(), אלא אם האפליקציה שלך היא אפליקציית מערכת או מדיניות מכשיר שלט רחוק (DPC). במקום זאת, השתמשו חלונית ההגדרות.

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

מקורות מידע נוספים

למידע נוסף על Geofencing, ניתן לעיין בחומרים הבאים:

דוגמיות

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