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

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

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

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

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

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

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

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

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

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

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

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

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

כדאי להפסיק את המעקב אחרי מתחם הגיאופסי כאשר אין צורך בו יותר, כדי לחסוך בסוללה ובמחזורי המעבד במכשיר. אפשר להפסיק את המעקב אחרי גבולות וירטואליים בפעילות הראשית שמשמשת להוספה ולהסרה של גבולות וירטואליים. הסרה של גבולות וירטואליים גורמת לעצירה מיידית. ה-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. החל מגרסה 4.3 של Android‏ (רמת API 18), הוספנו את האפשרות 'מצב סריקת Wi-Fi בלבד', שמאפשרת למשתמשים להשבית את ה-Wi-Fi ועדיין לקבל מיקום רשת טוב. כדאי לבקש מהמשתמש לספק קיצור דרך כדי לאפשר לו להפעיל רק את המצב של סריקת Wi-Fi או Wi-Fi, אם שניהם מושבתים. משתמשים ב- SettingsClient כדי לוודא שהגדרות המערכת של המכשיר מוגדרות בצורה נכונה לזיהוי מיקום אופטימלי.

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

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

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

למידע נוסף על גיאופיינס, אפשר לעיין במאמרים הבאים:

דוגמיות

אפליקציה לדוגמה ליצירה ולמעקב אחרי אזורי הגנה גיאוגרפיים.