프로그래밍/android2013.08.26 19:20


외부 라이브러리 가져오기

1. SDK Manager에서 Google Play Service를 설치한다.




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


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



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 - 게임 서비스 - 새 게임 추가




6. 앱 연결하기


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



지금 앱 승인을 누른다.




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



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




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



정상적으로 승인이 됐으면 아무 오류 없이 이 화면이 뜬다.

오류가 있다면 api console에서 같은 패키지 경로를 사용하는 앱이 이미 있어서 일 가능성이 높다.



이렇게 정상적으로 목록에 나타난다.

여러 앱에서 하나의 게임서비스를 연결해도 괜찮다.



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



7. 업적 생성





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



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


잘 만들어졌다.




8. 리더보드 생성




최고 점수 공유용




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





코드 수정

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로 만들지 않았거나, 테스트 계정을 추가하지 않으면 이런 에러가 뜬다.


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




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



작동 확인













TestGameCenter.zip


저작자 표시 비영리
신고
Posted by 쎄미

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 안녕하세요! 검색하다가 들렀어요. 좋은 정보 잘 봤습니다.^^; 인사라도 하고 가야할 것 같아.

    2014.03.03 11:30 신고 [ ADDR : EDIT/ DEL : REPLY ]
  3. sssoul

    질문이 있습니다.
    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 폴더로 복사한다.

    이 부분에서 그냥 파일을 제가 만든 프로젝트의 MainActivity가 있는 폴더로 복사하면 되는건가요?

    2014.03.12 12:27 신고 [ ADDR : EDIT/ DEL : REPLY ]
  4. sssoul

    또 질문이네요 ㅠㅠ 그대로 따라 했는데
    Google Play Games 로고가 뜨고 로딩 이미지 표시되더니
    Failed to sign in. Please check your network connection and try again 라는 내용의 팝업이 뜨네요. ㅠㅠ 어떤 경우에 이런일이 발생 할까요?

    2014.03.12 14:54 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 네트웍에 문제있다는대요?
      그게 아니면 apk 안 만들고 이클립스에서 바로 올렸거나요.
      설명을 차근차근 따라해보세요

      2014.03.12 22:04 신고 [ ADDR : EDIT/ DEL ]
    • sssoul

      이유는 못 찾았지만 다시 다 지우고 처음부터 따라하니까 잘 되네요!!
      너무 큰 도움이 되었습니다!! 감사합니다!

      2014.03.13 14:59 신고 [ ADDR : EDIT/ DEL ]
    • 다행입니다 ㅎㅎ

      2014.03.13 20:21 신고 [ ADDR : EDIT/ DEL ]
    • Developer Console의 tester 에 아이디가 추가가 안됐을지도 모르겠네요

      2014.10.07 10:15 신고 [ ADDR : EDIT/ DEL ]
  5. 삥죠요

    안녕하세요
    내용 감사합니다.
    구글에 loginid 및 password 알죠요 어플에 사용할려고 하는데요
    부탁합니다.

    2014.04.30 21:27 신고 [ ADDR : EDIT/ DEL : REPLY ]
  6. 삥죠요

    Google Play Games
    가입해서면 가입한 아이디 .. 구글로그인 정상로 로그인 했는지 아는 방법,,,

    2014.05.02 18:22 신고 [ ADDR : EDIT/ DEL : REPLY ]
  7. 삥죠요

    만약에 구글 계정이 여렇게면 ..어떻게 알죠

    2014.05.02 18:25 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 아이디가 여러 개면 아이디 목록 나오면서 하나 선택하라고 합니다

      2014.05.02 23:08 신고 [ ADDR : EDIT/ DEL ]
  8. 성스러운눈

    감사합니다.. 저두 테스트 해볼께요^^

    2014.05.16 14:47 신고 [ ADDR : EDIT/ DEL : REPLY ]
  9. hiro

    안녕하세요 올리시는 글 잘보고있습니다. 질문이 있는데
    play service 를 사용할 activity를 BaseGameActivity를 상속하게 한다. (onSignInFailed(), onSignInSucceeded()가 추가된다)
    위와 같은 말씀을 하셨는데 어떤 파일에서 BaseGameActivity 을 상속하는가요 초보라서 어디서 바꿔야 할지도 모르겠어 질문합니다.
    한줄기 빛이 돼어주세요 ^^

    2014.05.28 12:02 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 말 그대로 저 서비스를 사용할 액티비티입니다. 저는 애초에 BaseActivity를 만들어서 BaseGameActivity를 상속했고, 그 외의 모든 액티비티는 BaseActivity를 상속해서 썼어요

      2014.05.29 00:19 신고 [ ADDR : EDIT/ DEL ]
  10. 빵죠요

    안녕하세요
    답 감사합니다.
    초자입니다.. 이해을 못해서 다시 질문을 합니다
    저는 cocos2s-x 개발하고 있고요
    구글로그인 또는 페이스복 로그인 여러 종류가 입니다.
    소비자가 구글로인 해야 가동하고..
    정상적으로 로그 성공해는지 알아 볼수 있는 함수..
    그리고 로그인 id을 알수 있는 함수을 부탁합니다.

    2014.06.05 17:14 신고 [ ADDR : EDIT/ DEL : REPLY ]
  11. 하라

    cocos2d-x 로 적용하고 있는데 jni 단일 쓰레드 연동 부분을 제외하고
    나머지 부분은 덕분에 잘 보고 적용하였습니다.
    복받으세요~~!!

    2014.06.09 18:16 신고 [ ADDR : EDIT/ DEL : REPLY ]
  12. 달콤

    https://github.com/playgameservices/android-samples 여기서
    최신 걸 받았더니 3개의 파일이더군요 그래서 가져왔는데 기존 클래스랑 달라져서 어떤 클래스에서 함수를 호출 해 써야 할지 모르겠어요

    지금꺼에서는 getGamesClient 이 클래스가 없어서요.

    2014.07.07 21:27 신고 [ ADDR : EDIT/ DEL : REPLY ]
  13. 조조

    안녕하세요.

    글을 보고 많은 도움을 받고 있습니다.

    여기저기 자료를 찾아보고 있는데 안드로이드 자료만 있고 IOS에 관련된 자료는 찾을 수가 없네요.

    IOS 에 구글플레이서비스 연동이나 리더보드 사용은 어떻게 하는지 아시나요?

    2014.09.22 12:19 신고 [ ADDR : EDIT/ DEL : REPLY ]
  14. 나크시

    안녕하세요. 질문이 하나 있는데요.
    최초 로그인 시에는 환영합니다. 라는 문구의 팝업이 출력되는데요.
    그 이후에는 출력이 되지 않는데 혹시 출력되는 방법을 알고 계시나요?

    2014.10.06 10:57 신고 [ ADDR : EDIT/ DEL : REPLY ]
  15. 희극지왕

    근데 소스가 옛날버전이라 여기를 토대로 검색해서 https://github.com/playgameservices/android-basic-samples 여기 샘플보고 작업했어요. 도움많이 받아 링크남겨요

    2014.10.17 18:30 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 바꿔야하는데, 저도 엄두가 안나서 그냥 놔두고 있어요;;;

      2014.10.17 21:08 신고 [ ADDR : EDIT/ DEL ]
  16. 이클립스 버전이 뭐죠? 저랑 설정이 달라서 ㅠ

    2014.12.18 09:50 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 중간에 코드 수정 부분말고는 지금과 많이 다르지 않습니다.

      2014.12.18 18:47 신고 [ ADDR : EDIT/ DEL ]
  17. 코끼리

    지금 cocos2dx로 개발 하고 있는데요 궁금한점은 BaseGameUtils 프로젝트를 import하지 않고서 작업하신건지요? BaseGameActivity.java와 GameHelper.java를 내가 만든 프로젝트로 가져온다. (가져오고 나서 package path 수정하기)라는 부분에서 이해가 안가는 점은 import한 상태에서 소스를 드레그앤 드롭해서 당겨온것인지요? 아니면 BaseGameActivity.java와 GameHelper.java파일을 내 프로젝트의 .java 파일이 있는 디렉토리에 직접 복사한후 프로젝트에 추가 시킨 것인지요? 잘 이해가 안돼서 질문드립니다..ㅠㅠ 혹시 cocos2dx로 작업 하신분 있으시면 public abstract class Myproject extends Cocos2dxActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 이런식으로도 가능한지 답변 기다리겠습니다..ㅠㅠ 컴파일은 되는데 기기에 올리면 unable to initiate 라고 뜨고 죽어버리네여..ㅠㅠ cocos2dx를 extends 하는 activity에서 직접 implement 하지 못한다면 따로 sub activity를 만들어서 cocos2dx랑 activity를 스위칭 하면서 googlegamecenter랑 통신해야 하는지요? 구현하신분 답변좀 부탁드립니다.. 꾸벅..

    2015.01.24 21:49 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • import 아니고 복사해서 썼어요. 파일 받는 사이트에 최신 사용법이 있으니 거기 글도 참고 하세요.
      cocos2d는 너무 오래 전 일이라 기억 안나고, 난다해도 플레이 서비스랑 연결한 적은 없어요..

      2015.01.25 08:09 신고 [ ADDR : EDIT/ DEL ]
    • http://addgame.blog.me/220272769153

      저도 코코스로 개발하고있습니다~!!
      저는 여기보고 도움 많이 받았어요.
      거의 다 한거 같은데,
      코코스에서 업적달성여부등 받아오는거 보고있어요 ㅜㅜ
      도와가며 하면 좋겠네요!!

      2016.05.03 21:18 신고 [ ADDR : EDIT/ DEL ]
  18. 쪠언

    cocos2dx로 해봤는데 잘되네용 좋은글 감사합니다~~

    2015.02.26 15:10 신고 [ ADDR : EDIT/ DEL : REPLY ]
  19. TUNA

    우선 이런 좋은 글 올려주셔서 감사합니다!

    매우 오랜 시간이 지난 글이지만 포스트를 보다가 궁금한 점이 생겨 질문 올립니다.

    제가 Android 개발을 한지 오래되지 않아 startActivityForResult 메서드를 처음 봅니다.
    다른건 어느정도 알겠지만 도대체 리더보드를 확인할 때 마지막 파라미터인 requestCode는 어떤 값을 넣어야 하는건지 감이 잡히지 않습니다 ㅠㅠ

    답변해주시면 감사하겠습니다. 바쁘시겠지만 부탁드립니다!

    2015.07.08 19:01 신고 [ ADDR : EDIT/ DEL : REPLY ]
  20. TUNA

    바쁘실텐데 답변감사드립니다!
    아무튼 포스팅 도움 많이 되었어요~ 다시한번 감사드려요!!

    2015.07.09 10:37 신고 [ ADDR : EDIT/ DEL : REPLY ]
  21. EE

    도움이 많이 되었습니다 감사합니다!

    2016.07.20 16:37 신고 [ ADDR : EDIT/ DEL : REPLY ]