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

[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에 추가한다.

 

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

 

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

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

 

13. 지원하는 함수들

 

주의사항
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

 

  • 기준서

    근데 submitscore로 등록한 점수는 startActivityForResult를 통해 랭킹화면을 출력하지 않으면 반영이 되지 않는건가요?
    랭킹 화면은 띄우지 않고 loadLeaderboardMetadata로 값만 받아오려고 하니 submitscore로 입력한 값이 전혀 반영이 안되고,
    startActivityForResult를 통해 랭킹화면을 띄우고 나서야 반영이 되더라구요.

    • 쎄미

      sdk를 최신으로 업데이트하고나서도 같은가요? 저도 모르겠네요

    • Shin’s

      loadLeaderboardMetadata로 리더보드에 있는 스코어값들만 불러 올수 있는건가요…?? 실례가 안된다면… 위에 함수를 사용하여 어떻게 받아서 처리 하는지 알려주실수 있으신가요…?? 저도 랭킹 화면 안띄우고 값만 받아와서 처리하고 싶은데 아직 배우는 학생이다보니까 너무 어렵네요 ㅠㅠ

      • 쎄미

        힘들게 갖고 왔는지, 하다가 안됐는지 암튼 그랬어요. 결국은 로직을 바꿔서 안 가지고 오게 했죠

  • 윤영석

    업적 확인할때, %로 찍히는게 있고, 그림으로 찍히는 업적이 있는데

    여러번 달성해야 하는 업적은 무조건 %로 찍히고
    한번만 달성해야 하는 업적은 그림으로 찍히는게 맞는건가요?

    혹시나 한번만 달성해야 하는 업적을 모르고 여러번 달성해야 하는 업적으로 등록해버리면
    업적을 달성해도 표시가 나지 않는건가요?

    • 쎄미

      네 맞습니다.
      한 번만 달성해도 되는 건 바로 100%가 되기때문에 그림으로 나옵니다.
      업적 등록 실수는, 실수한대로 나옵니다.

  • good보이

    지금은 안드로이드 스튜디오로 개발환경이 바뀌었는데
    지금은 어떻게 사용하고 계신가요???
    구글플레이 서비스에서 혹시 로그인한 유저의 게임 데이터(아이템, 코인, 캐시아이템 등 유저마다의 값)를 관리할수도 있는지 알려주실수 있나요???

    • 지금은 구글의 문서가 자세하게 되어있어서 그거보고 차근차근하면 쉽게 될 거예요.

      • good보이

        아 답변이 달렸었군요!!!
        답변 감사합니닷!
        안드로이드스튜디오에서 여차여차해서 님이 설명한대로 다 해냈네요 드디어 ㅎㅎ;;

        14번에 설명해주신게
        앱 출시전에도 테스트가 가능하다는말씀인거죠??
        테스터를 추가 해줬는데도 저 에러가 뜨네요…허허 멘붕~
        앱을 출시해봐야 하나 싶기도한데…출시를 막 해도 되나요?ㅋ; 출시한 앱을 다시 삭제 할수도 있겠죠?ㅋ
        님이 구글은 아니지만 한글설명을 해주셔서 정말 힘이 되네욥!

        • 알파나 베타에서도 테스트 가능했던 걸로 기억해요.