הטמעה ב-Android

הדוגמאות הבאות יעזרו לכם להטמיע את מזהה המכונה בלקוח Android. חשוב לציין שבדוגמאות האלה נעשה שימוש בהיקף של GCM, ששימושי רק למטרות הדגמה כי Google Cloud Messaging הוצא משימוש.

הגדרת Google Play Services

כדי לכתוב את אפליקציית הלקוח, משתמשים ב-Google Play Services SDK, כפי שמתואר במאמר הגדרת Google Play Services SDK. ספריית Play Services כוללת את ספריית מזהי המכונות.

אחזור מזהה מכונה

שורת הקוד הבאה מחזירה מזהה מכונה:

String iid = InstanceID.getInstance(context).getId();

יצירת טוקן

כדי ליצור אסימונים, צריך מזהה פרויקט שנוצר באמצעות Google Developers Console.

String authorizedEntity = PROJECT_ID; // Project id from Google Developer Console
String scope = "GCM"; // e.g. communicating using GCM, but you can use any
                      // URL-safe characters up to a maximum of 1000, or
                      // you can also leave it blank.
String token = InstanceID.getInstance(context).getToken(authorizedEntity,scope);

ניהול אסימונים ומזהי מכונות

מזהה המכונה מאפשר למחוק ולרענן אסימונים.

מחיקת אסימונים ומזהי מכונות

String authorizedEntity = PROJECT_ID;
String scope = "GCM";
InstanceID.getInstance(context).deleteToken(authorizedEntity,scope);

אפשר גם למחוק את מזהה המכונה עצמו, כולל כל האסימונים המשויכים. בפעם הבאה שתפעילו את getInstance(), תקבלו מזהה מכונה חדש:

InstanceID.getInstance(context).deleteInstanceID();
String newIID = InstanceID.getInstance(context).getId();

אסימוני רענון

שירות מזהה המכונה מפעיל קריאות חזרה (callbacks) מדי פעם (לדוגמה, כל 6 חודשים), ומבקש מהאפליקציה לרענן את האסימונים שלה. הוא עשוי גם להפעיל שיחות חוזרות במקרים הבאים:

  • יש בעיות אבטחה, למשל בעיות ב-SSL או בפלטפורמה.
  • פרטי המכשיר כבר לא תקפים, למשל גיבוי ושחזור.
  • שירות מזהה המכונה מושפע בדרך אחרת.

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

public class MyInstanceIDService extends InstanceIDListenerService {
  public void onTokenRefresh() {
    refreshAllTokens();
  }

  private void refreshAllTokens() {
    // assuming you have defined TokenList as
    // some generalized store for your tokens
    ArrayList<TokenList> tokenList = TokensList.get();
    InstanceID iid = InstanceID.getInstance(this);
    for(tokenItem : tokenList) {
      tokenItem.token =
        iid.getToken(tokenItem.authorizedEntity,tokenItem.scope,tokenItem.options);
      // send this tokenItem.token to your server
    }
  }
};

צריך גם להגדיר את השירות הזה בקובץ המניפסט של הפרויקט:

<service android:name=".MyInstanceIDService" android:exported="false">
  <intent-filter>
        <action android:name="com.google.android.gms.iid.InstanceID"/>
  </intent-filter>
</service>