簡體   English   中英

如何在Android Studio中的應用中實施Google Play游戲服務?

[英]How do I implement Google Play Game services in my app in Android Studio?

我正在努力弄清楚如何在我的應用中實施Google Play游戲服務。 在Google Play開發者控制台上,我使用SHA1鍵將游戲與相關應用相關聯,我知道如何在此處添加排行榜和成就。 我還將Google Play服務和Google Repository安裝到Android Studio,並將依賴項添加到build.gradle (如此處所述: http//developer.android.com/google/play-services/setup.html )但我還沒有確定如何在該頁面上執行最后兩個步驟(創建Proguard例外並確保設備具有Google Play服務APK)以及是否有必要 - 后者甚至連Google Play游戲示例項目似乎都沒有做。

此外, 我不確定我的項目中實際需要添加哪些代碼來啟用排行榜和成就 ,因為根據本指南: https//developers.google.com/games/services/android/achievements ,我使用此碼:

Games.Achievements.unlock(mGoogleApiClient, "my_achievement_id");

例如,解鎖成就,但沒有關於如何設置mGoogleApiClient 我看過示例項目,但目前還不清楚我應該做些什么 我的意思是將所有代碼復制並粘貼到我的項目中嗎? 我應該復制和粘貼某些部分嗎? 我是否必須編寫自己的代碼才能登錄Google Play游戲?

您應該使用getApiClient()而不是mGoogleApiClient。

假設您的活動布局包含四個按鈕:

 Leaderboard button - To launch the leaderboards,
 Achievement button - To launch achievements
 Sign in and Sign out buttons

對於排行榜,我們推出best minutes, best distance covered and an overall highscore

為了取得成就,我們根據某些條件解鎖了四項成就 - survivor, warrior, lord, pride

這是你如何去做的:

public class GMSActivity extends BaseGameActivity implements OnClickListener{
    Button lead;
    Button achv;
    final int RC_RESOLVE = 5000, RC_UNUSED = 5001;
//your game score. so we can push to cloud
    int hS = 0; 
//flags for achievements
   boolean survivor;
   boolean tribalWarriror;
   boolean akonfemLord;
   boolean zuluPride;
   LinearLayout signInBar;
   LinearLayout signOutBar;
    Resources r;
    private float bestTimeInSeconds;
    private int bestTimeInMinutes;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
            super.onCreate(savedInstanceState);
            setContentView(R.layout.gms_layout);
            r = getResources();
            lead = (Button)findViewById(R.id.leaderboards);
            achv = (Button)findViewById(R.id.achievements);
            hS = loadScores();
            findViewById(R.id.sign_in_button).setOnClickListener(this);
            findViewById(R.id.sign_out_button).setOnClickListener(this);


            lead.setOnClickListener(this);
            achv.setOnClickListener(this);


               signInBar = (LinearLayout)findViewById(R.id.sign_in_bar);
               signOutBar = (LinearLayout)findViewById(R.id.sign_out_bar);


            checkForAchievements();
             if (isSignedIn()) {
                 onSignInSucceeded();
             }else{
                onSignInFailed();
             }


        }



        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
              if(v == lead){
                  if (isSignedIn()) {
                        startActivityForResult(Games.Leaderboards.getAllLeaderboardsIntent(getApiClient()), RC_UNUSED);
                    } else {
                        showAlert(getString(R.string.leaderboards_not_available));
                    }
            }else if(v ==achv){
                 if (isSignedIn()) {
                        startActivityForResult(Games.Achievements.getAchievementsIntent(getApiClient()), RC_UNUSED);
                    } else {
                        showAlert(getString(R.string.achievements_not_available));
                    }

            }else if(v.getId() == R.id.sign_in_button){
                beginUserInitiatedSignIn();

            }else if(v.getId() == R.id.sign_out_button){
                  signOut();
                  hello.setText(getString(R.string.signed_out_greeting));
                    signInBar.setVisibility(View.VISIBLE);
                    signOutBar.setVisibility(View.GONE);

        }



        @Override
        public void onSignInFailed() {
            hello.setText(getString(R.string.signed_out_greeting));
            signInBar.setVisibility(View.VISIBLE);
            signOutBar.setVisibility(View.GONE);
        }

        @Override
        public void onSignInSucceeded() {

            signInBar.setVisibility(View.GONE);
            signOutBar.setVisibility(View.VISIBLE);
             // Set the greeting appropriately on main menu
            Player p = Games.Players.getCurrentPlayer(getApiClient());
            String displayName;
            if (p == null) {
             //   Log.w(TAG, "mGamesClient.getCurrentPlayer() is NULL!");
                displayName = "";
            } else {
                displayName = p.getDisplayName();
            }
           // hello.setText("Hello, " + displayName);

                pushAccomplishments();
                Toast.makeText(this, getString(R.string.your_progress_will_be_uploaded),
                        Toast.LENGTH_LONG).show();

        }
        //check for achievements and unlock the appropriate ones
         void checkForAchievements() {
                // Check if each condition is met; if so, unlock the corresponding
                // achievement.
              bestTimeInSeconds = loadGameBestTimeSec();
              if(bestTimeInSeconds >= 900){ //15 minutes
                  survivor = true;
                  tribalWarriror = true;
              }

            }

          void pushAccomplishments() {
              if (survivor) 
                    Games.Achievements.unlock(getApiClient(), getString(R.string.achievement_survivor));

              if (tribalWarriror) 
                    Games.Achievements.unlock(getApiClient(), getString(R.string.achievement_tribal_warrior));


              if(bestTimeInSeconds >= 60){ //1 minute atleast
                     bestTimeInMinutes = (int)bestTimeInSeconds/60;
              Games.Leaderboards.submitScore(getApiClient(), getString(R.string.leaderboard_best_time_minutes), bestTimeInMinutes);
                }

              if(bestTimeInSeconds >= 10){   // 1 meter atleast
                    int bestDistance = (int)bestTimeInSeconds/10;
              Games.Leaderboards.submitScore(getApiClient(), getString(R.string.leaderboard_best_distance_meters), bestDistance);
                }


              Games.Leaderboards.submitScore(getApiClient(), getString(R.string.leaderboard_top_score_points), hS);

            }


             @Override


             //loading scores and achievements
             private int loadScores() {
                // TODO Auto-generated method stub
                 int score = 0;
                   try{
                    preferences = new SecurePreferences(getApplicationContext(),
                            "besiPreferences", "1234", true);
                    score = Integer.parseInt(preferences.getString("highScore"));
                   }catch(Exception e){}
                    return score;

                    }

             private float loadGameBestTimeSec() {
                 float time = 0;
                  try{
                preferences = new SecurePreferences(getApplicationContext(),
                            "besiPreferences", "1234", true);
                time = Float.parseFloat(preferences.getString("gameTimeSec"));
                  }catch(Exception e){}
                   return time;
             }

             private int loadCalabashesCompleted() {
                    try{
                        preferences = new SecurePreferences(getApplicationContext(),
                                "makolaPref", "1234", true);
                        return Integer.parseInt(preferences.getString("bookCompleted")== null ? "0" : preferences.getString("bookCompleted"));
                       }catch(Exception e){
                         return 0;  
                       }
                }

             private int loadLevelCompleted() {
                    try{
                        preferences = new SecurePreferences(getApplicationContext(),
                                "makolaPref", "1234", true);
                        return Integer.parseInt(preferences.getString("levelCompleted")== null ? "0" : preferences.getString("levelCompleted"));
                       }catch(Exception e){
                         return 0;  
                       }
                }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM