גישה ל-Google APIs

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

שנתחיל?

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

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

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

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