גישה ל-Google APIs

כדי לגשת לממשקי API שמבוססים על שירותי Google Play באפליקציית 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."));
}