גישה ל-Google APIs

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

שנתחיל?

לפני שמתחילים, חשוב לוודא שהגדרתם את Google Play Services בפרויקט של האפליקציה.

כדי לגשת לשירות שלא דורש הרשאה, יוצרים מופע של אובייקט הלקוח של השירות, ומעבירים אובייקט Context או אובייקט Activity. במידת הצורך, המשתמשים מתבקשים לשדרג את Google Play Services לפני שמתבצעות קריאות ל-API.

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

Kotlin

// Code required for requesting location permissions omitted for brevity.
val client = LocationServices.getFusedLocationProviderClient(this)

// Get the last known location. In some rare situations, this can be null.
client.lastLocation.addOnSuccessListener { location : Location? ->
    location?.let {
        // Logic to handle location object.
    }
}

Java

// Code required for requesting location permissions omitted for brevity.
FusedLocationProviderClient client =
        LocationServices.getFusedLocationProviderClient(this);

// Get the last known location. In some rare situations, this can be null.
client.getLastLocation()
        .addOnSuccessListener(this, location -> {
            if (location != null) {
                // Logic to handle location object.
            }
        });

כדי לגשת לממשקי API שדורשים הרשאת משתמש, פועלים לפי המדריך לאישור גישה לנתוני משתמשים ב-Google. אם אתם משתמשים ב-API שדורש אובייקט GoogleSignInAccount, השתמשו ב-method‏ AuthorizationResult#toGoogleSignInAccount().

בדיקת הזמינות של ה-API

לפני שמפעילים תכונה שתלויה ב-API של Google Play Services, צריך לבדוק אם ה-API זמין במכשיר באמצעות קריאה ל-checkApiAvailability().

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

Kotlin

fun getLastLocationIfApiAvailable(context: Context?): Task<Location>? {
    val client = getFusedLocationProviderClient(context)
    return GoogleApiAvailability.getInstance()
        .checkApiAvailability(client)
        .onSuccessTask { _ -> client.lastLocation }
        .addOnFailureListener { _ -> Log.d(TAG, "Location unavailable.")}
}

Java

public Task<Location> getLastLocationIfApiAvailable(Context context) {
    FusedLocationProviderClient client =
            getFusedLocationProviderClient(context);
    return GoogleApiAvailability.getInstance()
            .checkApiAvailability(client)
            .onSuccessTask(unused -> client.getLastLocation())
            .addOnFailureListener(e -> Log.d(TAG, "Location unavailable."));
}