הטמעה ב-Android

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

הגדרת Google Play Services

כדי לכתוב את אפליקציית הלקוח, צריך להשתמש ב-Google Play Services SDK, כפי שמתואר במאמר הגדרת SDK של שירותי Google Play. ספריית 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();

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

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

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

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

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>