כדי לגשת לממשקי 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.")); }