開始使用 C++ 適用的 Play 遊戲服務

Google Play 遊戲服務 C++ SDK 提供 C++ API,可與 Google Play 遊戲搭配使用 適用於已實作 C++ 的開發人員

目前 SDK 會實作下列服務:

  • 授權
  • 成就
  • 排行榜
  • 活動
  • 遊戲進度存檔
  • 鄰近分享連線 (僅限 Android)
  • 玩家統計資料

概念

大致來說,您可以按照下列步驟使用 SDK:

  1. 進行 Android 平台設定。
  2. 使用 GameServices::Builder 來設定及建構 GameServices 物件。GameServices 物件會自動嘗試登入,並傳回 並透過 OnAuthActionFinished() 回呼取得結果。記下結果 。如果自動登入失敗 顯示讓使用者登入的按鈕。
  3. 收到 OnAuthActionFinished() 結果後,您可以使用 GameServices 物件及其子管理員發出 Play 遊戲服務呼叫。 包括:

    • 登入 (授權失敗後):StartAuthorizationUI()
    • 解鎖成就:Achievements().Unlock()
    • 使用內建 UI 顯示成就:Achievements().ShowAllUI()
    • 提交最高分:Leaderboards().SubmitScore()
    • 登出:SignOut()
  4. 使用完 GameServices 物件後,請重設或刪除物件。

更詳細的層級資訊:

  1. 初始化平台設定:此物件包含 特定平台的初始化資訊在 Android 上,平台設定含有 Java VM 和目前 Activity 的指標:

    // In android_main(), create a platform configuration
    // and bind the object activity.
    // Alternately, attach the activity in JNI_Onload().
    gpg::AndroidPlatformConfiguration platform_configuration;
    platform_configuration.SetActivity(state->activity->clazz);
    
  2. 建構 GameServices 物件:這個物件是 提供 Google Play 遊戲服務功能已建立 GameServices 個執行個體 GameServices::Builder

    在大部分實作中,指定的 GameServices 物件只要 C 環境的功用;不需要在 Android Activity 會暫停並繼續。

    // Creates a GameServices object that has lambda callbacks.
    game_services_ = gpg::GameServices::Builder()
            .SetDefaultOnLog(gpg::LogLevel::VERBOSE)
            .SetOnAuthActionStarted([started_callback](gpg::AuthOperation op) {
                is_auth_in_progress_ = true;
                started_callback(op);
            })
            .SetOnAuthActionFinished([finished_callback](gpg::AuthOperation op,
                                                         gpg::AuthStatus status) {
                LOGI("Sign in finished with a result of %d", status);
                is_auth_in_progress_ = false;
                finished_callback(op, status);
            })
            .Create(pc);
    
  3. 使用 Manager 類別管理 GameServices 物件。管理員可透過 GameServices 執行個體和群組相關功能存取 。以下例子 包括成就和排行榜管理員。不包含任何使用者可見的 狀態本身管理員會以參照方式傳回管理員,而其中的 GameServices 個執行個體控管其生命週期。您的客戶 加上名為 Manager 的參照相反地,您的客戶 GameServices 執行個體。

    管理員會透過不可變動的值類型物件傳回資料。這些值 表示資料中某個時間點呈現的基礎資料 查詢的執行方式

    // Submit a high score
    game_services_->Leaderboards().SubmitScore(leaderboard_id, score);
    
    // Show the default Achievements UI
    game_services_->Achievements().ShowAllUI();
    
  4. 使用完 GameServices 物件後,請清除 在其擁有的 unique_ptr 上呼叫 reset(),或讓 unique_ptr 會在超出範圍時自動刪除。

執行緒模型

除非另有註明,否則所有 GameServices 和 Manager 方法都是由 執行緒安全及非同步實作可以在沒有程式碼的情況下呼叫任何執行緒 外部鎖定,並按照其叫用順序執行 順序。

存取子方法 (讀取狀態) 有兩個主要變化版本。第一個 方法類型 (例如 FetchProperty() 等名稱) 會以非同步方式提供結果 所提供的回呼;其二 (名稱 FetchPropertyBlocking()) 會將結果同步傳回呼叫 。

// Blocking callback
gpg::AchievementManager::FetchAllResponse fetchResponse =
        game_services_->Achievements().FetchAllBlocking(std::chrono::milliseconds(1000));

// Non-blocking callback
game_services_->Achievements().FetchAll(gpg::DataSource::CACHE_OR_NETWORK,
    [] (gpg::AchievementManager::FetchAllResponse response) {
    LogI("Achievement response status: %d", response.status);});

所有使用者都會在專屬的回呼執行緒上叫用。這個討論串是 可能與「主執行緒」的任何平台概念不同或「使用者介面」 對話串。您也應該要設法確保使用者回呼能快速執行;當機的回呼執行緒 可能造成使用者看見的問題 (例如延遲登出完成) 請求)。

平台專屬資訊

如要開始在 Android 上使用 Play 遊戲 C++ SDK,請繼續參閱 快速入門指南

延伸閱讀

請務必閱讀 Google Play 遊戲中的課程文件 或 範例

如果您的遊戲使用後端伺服器,請參閱 啟用 Google Play 遊戲服務的伺服器端存取權