אימות פלטפורמה במשחקי Android

כדי לגשת לפונקציונליות של Google Play Games Services, המשחק שלכם צריך לספק את החשבון של השחקן המאומת. במסמכי התיעוד האלה מוסבר איך להטמיע במשחק חוויית אימות חלקה.

גרסה 2 של ה-SDK של Play Games Services כוללת מספר שיפורים שמגדילים את מספר המשתמשים שמאומתים במשחק שלכם, ומקלים על תהליך הפיתוח:

  • שיפורים למשתמשים:
    • אחרי שבוחרים חשבון ברירת מחדל, המשתמשים מאומתים בלי שצריך להציג להם בקשה.
    • המשתמשים כבר לא צריכים להוריד את אפליקציית Play Games כדי לבצע אימות באמצעות Play Games Services או ליצור חשבון חדש.
    • עכשיו המשתמשים יכולים לנהל את החשבונות שלהם ב-Play Games Services בכמה משחקים מדף אחד.
  • שיפורים למפתחים:
  • קוד הלקוח כבר לא צריך לטפל בתהליך האימות או בתהליך היציאה, כי הכניסה מופעלת אוטומטית כשהמשחק מתחיל, וניהול החשבון מתבצע בהגדרות של מערכת ההפעלה.

שילוב לקוח חדש

בקטע הזה מוסבר איך לבצע שילוב חדש של לקוח עם Play Games Services Sign In v2.

הוספת התלות

מוסיפים את התלות ב-SDK של Play Games Services לקובץ build.gradle ברמת הבסיס של האפליקציה. אם משתמשים ב-Gradle, אפשר להוסיף או לעדכן את יחסי התלות באופן הבא:

dependencies {
 implementation "com.google.android.gms:play-services-games-v2:+"
}

הגדרת מזהה הפרויקט

כדי להוסיף את מזהה הפרויקט של Play Games Services SDK לאפליקציה, מבצעים את השלבים הבאים:

  1. בקובץ AndroidManifest.xml של האפליקציה, מוסיפים את הרכיב <meta-data> והמאפיינים הבאים לרכיב <application>:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    

    מגדירים את ההפניה למשאב המחרוזת @string/game_services_project_id באמצעות מזהה פרויקט Game services של המשחק כערך. מזהה הפרויקט של Games Services מופיע מתחת לשם המשחק בדף הגדרות ב-Google Play Console.

  2. בקובץ res/values/strings.xml, מוסיפים הפניה למשאב מחרוזת ומגדירים את מזהה הפרויקט כערך. ב-Google Play Console, מזהה הפרויקט מופיע מתחת לשם המשחק בדף הגדרות. לדוגמה:

    <!-- res/values/strings.xml -->
    <resources>
      <!-- Replace 0000000000 with your game's project id. Example value shown above.  -->
      <string translatable="false"  name="game_services_project_id"> 0000000000 </string>
    </resources>
    

אתחול ה-SDK

מאתחלים את Play Games SDK ב-callback‏ onCreate(..) של המחלקה Application.

import com.google.android.gms.games.PlayGamesSdk;

...

@Override
public void onCreate(){
  super.onCreate();
  PlayGamesSdk.initialize(this);
}

קבלת תוצאת האימות

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

כדי לאמת את ניסיון האימות, קוראים ל-GamesSignInClient.isAuthenticated() ומשתמשים ב-addOnCompleteListener כדי לאחזר את התוצאות. לדוגמה:

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());

gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
  boolean isAuthenticated =
    (isAuthenticatedTask.isSuccessful() &&
     isAuthenticatedTask.getResult().isAuthenticated());

  if (isAuthenticated) {
    // Continue with Play Games Services
  } else {
    // Show a sign-in button to ask players to authenticate. Clicking it should
    // call GamesSignInClient.signIn().
  }
});

מניעת הפעלה אוטומטית של יצירת פרופיל

אפשר להשבית את ההנחיות ליצירת פרופיל שמופעלות אוטומטית דרך קובץ המניפסט. כך המשתמשים שאין להם פרופיל Play Games Services יוכלו להמשיך לטעון את המשחק בלי לקבל בקשה ליצור פרופיל Play Games Services. מידע נוסף זמין במאמר בנושא אפשרויות ליצירת פרופיל.

כדי להשתמש בתכונה הזו, צריך לוודא שהתנאים הבאים מתקיימים:

  • לא קיים פרופיל של שירותי Play Games באף אחד מחשבונות Google שמחוברים למכשיר.
  • המשחק שלך משולב עם Play Games Services SDK בגרסה com.google.android.gms:play-services-games-v2:21.0.0 ואילך.

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

  1. בקובץ AndroidManifest.xml, מוסיפים את התג com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION ברכיב <meta-data> ואת המאפיינים לרכיב <application>:

    <application>
        ...
        <meta-data
            android:name="com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION"
            android:value="true" />
        ...
    </application>
    

    הגדרת הדגל הזה כ-true מודיעה ל-Play Games Services שהמשחק יטפל בתהליך יצירת הפרופיל. כתוצאה מכך, Play Games Services לא יציג אוטומטית את ממשק המשתמש ליצירת פרופיל למשתמשים במכשיר שאין להם פרופיל קיים ב-Play Games Services.

  2. כשמפעילים API של Play Games Services, קוד הסטטוס GamesClientStatusCodes.SIGN_IN_REQUIRED מציין שההפעלה נכשלה כי לא הייתה אפשרות לאמת את המשתמש באופן אוטומטי בגלל שלא היה לו פרופיל Play Games Services.

    כך המשתמשים שאין להם פרופיל Play Games Services יוכלו להמשיך עם שיטות האימות שהטמעתם בלי לקבל מיד בקשה ליצור פרופיל Play Games Services. אפשר ליצור פרופיל על ידי התקשרות אל GamesSignInService.signin().

    import com.google.android.gms.games.PlayGames;
    ...
    
    // Get the achievements client using Play Games services.
    AchievementsClient achievementsClient = PlayGames.getAchievementsClient(getActivity());
    achievementsClient.getAchievementsIntent()
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception exception) {
                int statusCode = ((ApiException) exception).getStatusCode();
                if (statusCode == GamesClientStatusCodes.SIGN_IN_REQUIRED) {
                  // SIGN_IN_REQUIRED: The user needs to sign in with Play Games Services.
                  // Call GamesSignInService.signin() to prompt for
                  // authentication at a suitable time which will trigger the
                  // profile creation UI.
                  // (e.g., after a tutorial). Use GamesSignInService.isAuthenticated() to check auth status.
                }
              }
            });
  3. אחרי שמוסיפים את תג ההסרה, משתמשים בחלון logcat כדי לוודא שההוספה בוצעה. הפלט logcat מכיל הודעה שדומה להודעה הבאה: "המשחק לא נכלל בהנחיה ליצירת פרופיל אוטומטי (באמצעות מניפסט)".