מעבר ללקוח GoogleApi

גרסה 11.2.0 של ה-SDK של שירותי Google Play כוללת דרך חדשה לגשת ל-Place SDK ל-Android. קל יותר להשתמש בלקוח GoogleApi בהשוואה לקודמו (GoogleApiClient), כי הוא מנהל באופן אוטומטי את החיבורים ל-Google Play Services. כך תוכלו להפחית את כמות הקוד הסטנדרטי באפליקציה ולהימנע משגיאות נפוצות רבות. ה-API החדש כולל מספר שיפורים:

  • תהליך החיבור מנוהל באופן אוטומטי, כך שההטמעה של ה-API החדש כרוכה בפחות עבודה.
  • קריאות ל-API ממתינות עכשיו באופן אוטומטי ליצירת החיבור לשירות, וכך אין צורך להמתין ל-onConnected לפני שליחת בקשות.
  • קל יותר לכתוב פעולות אסינכרוניות באמצעות Tasks API.
  • הקוד הוא עצמאי ואפשר להעביר אותו בקלות למחלקה משותפת או למחלקה דומה.

כדי לעדכן את האפליקציה שלך לשימוש בלקוח GoogleApi, צריך לבצע שינויים מסוימים בהטמעה של Places SDK ל-Android. במדריך הזה מתוארים השינויים ב-Place SDK עבור Android, ומפורטות פעולות שכדאי לבצע כשמעדכנים את האפליקציה כך שישתמשו בלקוח החדש.

סקירה כללית

אלה התחומים העיקריים שבהם יחול השינוי:

  • יש שתי נקודות כניסה חדשות: GeoDataClient ו-PlaceDetectionClient. במקום ליצור מופע אחד של GoogleApiClient שיכסה את כל ממשקי ה-API, האפליקציה צריכה עכשיו ליצור גם את GeoDataClient וגם את PlaceDetectionClient.
  • מאחר שכבר אין צורך בקריאות חוזרות (callback) לחיבור, תוכלו לסדר מחדש את האפליקציה באופן בטוח כדי להסיר אותן.
  • השיטות החדשות של Places API הן אסינכרוניות עכשיו, ומחזירות Task במקום PendingResult.

טעינת ה-Places API

כדי לטעון את ה-Places API, מצהירים על נקודות הכניסה ומיוצרים את הלקוחות במתודה onCreate() של המקטע או הפעילות, כפי שמוצג בדוגמה הבאה:

// The entry points to the Places API.
private GeoDataClient mGeoDataClient;
private PlaceDetectionClient mPlaceDetectionClient;

...
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Construct a GeoDataClient.
    mGeoDataClient = Places.getGeoDataClient(this, null);

    // Construct a PlaceDetectionClient.
    mPlaceDetectionClient = Places.getPlaceDetectionClient(this, null);

השוואה

השיטות החדשות של Places API הן אסינכרוניות עכשיו, ומחזירות Task במקום PendingResult. מבני הנתונים לא השתנו, ולכן לא צריך לעדכן את הקוד הקיים לטיפול בתוצאות. בדוגמאות הבאות של הקוד מוצגת השוואה בין הגרסה החדשה לגרסה הישנה של GetCurrentPlace():

הדרך החדשה

Task<PlaceLikelihoodBufferResponse> placeResult = mPlaceDetectionClient.getCurrentPlace(null);
placeResult.addOnCompleteListener(new OnCompleteListener<PlaceLikelihoodBufferResponse>() {
    @Override
    public void onComplete(@NonNull Task<PlaceLikelihoodBufferResponse> task) {
        PlaceLikelihoodBufferResponse likelyPlaces = task.getResult();
        for (PlaceLikelihood placeLikelihood : likelyPlaces) {
            Log.i(TAG, String.format("Place '%s' has likelihood: %g",
                placeLikelihood.getPlace().getName(),
                placeLikelihood.getLikelihood()));
        }
        likelyPlaces.release();
    }
});

הדרך הישנה

PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi
    .getCurrentPlace(mGoogleApiClient, null);
result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() {
  @Override
  public void onResult(PlaceLikelihoodBuffer likelyPlaces) {
    for (PlaceLikelihood placeLikelihood : likelyPlaces) {
      Log.i(TAG, String.format("Place '%s' has likelihood: %g",
          placeLikelihood.getPlace().getName(),
          placeLikelihood.getLikelihood()));
    }
    likelyPlaces.release();
  }
});

מידע נוסף

למידע נוסף על גישה ל-Google APIs.