[android] Google play service를 이용해서 점수 공유, 업적 달성 추가하기

외부 라이브러리 가져오기
1. SDK Manager에서 Google Play Service를 설치한다.
스크린샷_2013-08-26_오후_5.19.29

2. 이클립스에서 {sdk}/extras/google/google_play_services/libproject/google-play-services_lib 를 import 한다.

 

 

3. 내가 만든 프로젝트 – properties – Android – Library – Add… – google-play-services_lib 선택 – ok

스크린샷_2013-08-26_오후_5.24.20

 

4.
– https://github.com/playgameservices/android-samples – Download Zip – 압축 풀고 libraries/BaseGameUtils/src/com/google/example/games/basegameutils 의 BaseGameActivity.java와 GameHelper.java를 내가 만든 프로젝트로 가져온다. (가져오고 나서 package path 수정하기)
– libraries/BaseGameUtils/res/values/gamehelper_strings.xml 을 내 프로젝트/res/strings 폴더로 복사한다.

 

 

Google Developer Console
5. https://play.google.com/apps/publish – 게임 서비스 – 새 게임 추가

스크린샷_2013-08-26_오후_5.49.42

 

 

6. 앱 연결하기

패키지 이름에는 내가 만든 앱의 패키지 경로를 넣어준다.

스크린샷_2013-08-26_오후_5.51.00

 

지금 앱 승인을 누른다.

스크린샷_2013-08-26_오후_5.51.47

 

 

이런 창이 뜨는데, Continue를 누른다.

스크린샷_2013-08-26_오후_5.51.58

 

이클립스에서 Manifest – Use the Export Wizard를 이용해서 SHA1 값을 복사해온다.

스크린샷_2013-08-26_오후_5.52.22

 

 

복사한 SHA1값을 붙여넣는다.

스크린샷_2013-08-26_오후_5.52.42

 

정상적으로 승인이 됐으면 아무 오류 없이 이 화면이 뜬다.
오류가 있다면 api console에서 같은 패키지 경로를 사용하는 앱이 이미 있어서 일 가능성이 높다.

스크린샷_2013-08-26_오후_5.52.56

 

이렇게 정상적으로 목록에 나타난다.
여러 앱에서 하나의 게임서비스를 연결해도 괜찮다.

스크린샷_2013-08-26_오후_5.54.23

 

Google api console에도 이렇게 자동적으로 앱이 등록된다.

스크린샷_2013-08-26_오후_5.55.06

 

 

7. 업적 생성

한 번만 달성하면 되는 업적(설명이 너무 길면 잘리더라)

스크린샷_2013-08-26_오후_6.02.15

여러 번 달성해야 하는 업적(같은 업적을 여러 번 달성해야 할 때)

스크린샷_2013-08-26_오후_6.02.47

 

잘 만들어졌다.

스크린샷_2013-08-26_오후_6.04.15

 

 

8. 리더보드 생성

최고 점수 공유용

스크린샷_2013-08-26_오후_6.05.37

 

가장 빨리 끝낸 시간 공유용(코드에서 업로드할 때 단위는 millisecond로 해야한다)

스크린샷_2013-08-26_오후_6.06.14

 

코드 수정
9. 업적이나 리더보드 목록 아래의 ‘리소스 받기’를 클릭하면 ID들이 나오는데, strings.xml에 추가한다.

<string name="app_id">18868752446</string>
<string name="achievement_1">CggIvqCppUYQAhAB</string>
<string name="achievement_2">CggIvqCppUYQAhAC</string>
<string name="leaderboard_point">CggIvqCppUYQAhAD</string>
<string name="leaderboard_time">CggIvqCppUYQAhAE</string>

 

10. Manifest의 application 안에 아래의 코드를 추가한다.

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

 

11. play service 를 사용할 activity를 BaseGameActivity를 상속하게 한다. (onSignInFailed(), onSignInSucceeded()가 추가된다)

12. 화면에 Sing In Button을 추가한다.

<com.google.android.gms.common.SignInButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

 

13. 지원하는 함수들

// google login
beginUserInitiatedSignIn(); 

// 리더보드
getGamesClient().submitScore(리더보드ID, 점수);   

// 업적 달성
getGamesClient().unlockAchievement(업적ID);   

// 여러 번 달성해야 하는 업적
getGamesClient().incrementAchievement(업적ID, 달성횟수);  

// 리더보드 확인
startActivityForResult(getGamesClient().getLeaderboardIntent(getString(R.string.leaderboard_point)), requestCode); 

// 전체 리더보드 확인
startActivityForResult(getGamesClient().getAllLeaderboardsIntent(), requestCode); 

// 업적 확인
startActivityForResult(getGamesClient().getAchievementsIntent(), requestCode);

 

주의사항
14. 로그인 테스트를 하기위해서는 apk로 만들어야 하며, 앱을 마켓에 개시하지 않았다면 Developer Console에서 테스트 계정을 추가해야 한다.
apk로 만들지 않았거나, 테스트 계정을 추가하지 않으면 이런 에러가 뜬다.

device-2013-08-26-184158

 

Developer Console에서 테스트 계정을 추가한다.

스크린샷_2013-08-26_오후_6.51.06

 

 

15. 애플리케이션을 게시로 바꾼 후, 게임서비스에서도 게시로 바꿔줘야한다. 안그러면 실 사용자들이 로그인이 되지 않는다.

 

 

작동 확인

device-2013-08-26-190702

 

device-2013-08-26-190713

 

device-2013-08-26-190725

 

device-2013-08-26-191345

device-2013-08-26-191636

device-2013-08-26-191024

device-2013-08-26-191414

TestGameCenter.zip