Google+ Platform for Android

Google+ API 설정

  1. Google APIs Console 에 들어가서 Google+ API Project 를 생성한다.
  2. 생성된 프로젝트로 들어가서, APIs & auth – APIs 설정에 들어가서 Google+ API 와 이용할 API 를 설정한다.
    스크린샷 2014-03-02 오후 3.28.55
  3. APIs & auth – Credentials 설정에 들어가 CREATE NEW CLIENT ID 버튼을 클릭한다.
    screenshot– Installed application 과 Android 를 선택한다.
    – package name 은 테스트하려는 어플리케이션의 패키지명을 작성하고, SHA1 항목에는 keystore 의 SHA1 값을 작성한다. 여기서는 debug key 를 이용하였지만, keystore 는 배포시에는 마켓에 올릴 때 사용하는 keystore 를 이용하여야 한다.

    localhost$ keytool -exportcert -alias androiddebugkey -keystore /Users/chaeyeonghun/.android/debug.keystore -list -v
    키 저장소 비밀번호 입력: "android" for default key chain
    별칭 이름: androiddebugkey
    생성 날짜: 2013. 11. 1
    항목 유형: PrivateKeyEntry
    인증서 체인 길이: 1
    인증서[1]:
    소유자: CN=Android Debug, O=Android, C=US
    발행자: CN=Android Debug, O=Android, C=US
    일련 번호: 48af2567
    적합한 시작 날짜: Fri Nov 01 20:30:39 KST 2013, 종료 날짜: Sun Oct 25 20:30:39 KST 2043
    인증서 지문:
         MD5: FB:97:CD:F9:C6:3C:75:F3:03:48:F0:4E:7A:96:56:E8
         SHA1: 57:74:40:1D:20:5C:BF:D3:72:CD:FE:EF:B7:A4:D7:47:BC:13:6F:B2
         SHA256: 8B:DE:D5:92:22:E1:14:06:E3:54:C2:C4:8E:BD:E0:00:D7:B0:83:0A:59:B1:51:F9:67:18:A9:E6:7F:FF:E8:66
         서명 알고리즘 이름: SHA256withRSA
         버전: 3
    ...

    cmd 에서 위와 같은 명령어로 SHA1 값을 알 수 있다. debug key 는 보통 ~/.android/debug.keystore 에 위치해있고 비밀번호 입력은 android 를 입력하면 된다.
    Deep linking 는 activate interactive posts 를 이용하려면 활성화 하여야한다.

  4. 이 설정을 마치고 나서도 간혹 오류 (msg : 내부 오류가 발생하였습니다.) 가 발생하는 경우가 있는데, APIs & auth – Consent screen 이 입력되지 않았을 시 발생하기도 한다. 시작하기 전에 이 부분을 꼭 확인하는 것이 좋다.

Eclipse 설정

  1. File > Import > Android > Existing Android Code Into Workspace 를 통해 라이브러리를 불러온다. Google Play Service 라이브러리는 <android-sdk-folder>/extras/google/google_play_services/libproject  에 위치해있다.
  2. 작업하려는 프로젝트의 설정에 가서 라이브러리를 추가해준다.
    eclipse_import_play_lib

AndroidManifest.xml 편집

  1. 위의 meta-data 태그를 AndroidManifest.xml 의 application 의 아래로 추가해준다.
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
  2. Google Play Service API 를 이용하려면 아래와 같은 퍼미션이 요구된다.
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />

GoogleApiClient

https://github.com/proin/Google-Plus-SDK-Sample-for-Android 에 Google+와 연동한 간단한 어플리케이션 예제를 첨부해놓았다.

  1. GoogleApiClient 초기화
    mGoogleApiClient = new GoogleApiClient.Builder(this)
    .addApi(Plus.API)
    .addScope(Plus.SCOPE_PLUS_LOGIN)
    .addConnectionCallbacks(connectionCallbacks)
    .addOnConnectionFailedListener(connectionFailedListener).build();

    Google Plus API 이외에도 addApi 함수에서 Drive.API 등을 이용하여  다른 구글 서비스에 접속 할 수 있다.
    addScope 함수는 해당 서비스에 대한 권한을 얻는 것으로 생각하면 되고, 각각의 Callbacks 는 접속에 성공했을 때 와 실패했을 때 동작할 함수를 정의한 인터페이스이다.

  2. Callback 인터페이스
    private GoogleApiClient.ConnectionCallbacks connectionCallbacks = new GoogleApiClient.ConnectionCallbacks() {
        @Override
        public void onConnectionSuspended(int cause) {
        }
    
        @Override
        public void onConnected(Bundle connectionHint) {
        };
    
    private GoogleApiClient.OnConnectionFailedListener connectionFailedListener = new GoogleApiClient.OnConnectionFailedListener() {
        @Override
        public void onConnectionFailed(ConnectionResult result) {
            if (mResolvingError) {
                return;
            } else if (result.hasResolution()) {
                try {
                    mResolvingError = true;
                    result.startResolutionForResult(MainActivity.this, REQUEST_RESOLVE_ERROR);
                } catch (SendIntentException e) {
                    mGoogleApiClient.connect();
                }
            } else {
                Toast.makeText(MainActivity.this, "Failed", Toast.LENGTH_SHORT).show();
                mResolvingError = true;
            }
        }
    };

    onConnected 함수에서 Google Play Service 접속에 성공했을 시 동작할 코드를 기술할 수 있고, onConnectionFailed 함수에서 접속에 실패 했을 때 동작할 코드를 작성할 수 있다.

  3. 계정 정보 가져오기

    // Get User Info.
    Plus.AccountApi.getAccountName(mGoogleApiClient);
    
    // Get People Info.
    Plus.PeopleApi.loadVisible(mGoogleApiClient, null).setResultCallback(new ResultCallback<People.LoadPeopleResult>() {
        @Override
        public void onResult(LoadPeopleResult peopleData) {
            if (peopleData.getStatus().getStatusCode() == CommonStatusCodes.SUCCESS) {
                PersonBuffer personBuffer = peopleData.getPersonBuffer();
                try {
                    int count = personBuffer.getCount();
                    printData.setText(printData.getText() + "\n\npersons");
                    for (int i = 0; i < count; i++) {
                        printData.setText(printData.getText() + "\n" + personBuffer.get(i).getDisplayName());
                    }
                } finally {
                    personBuffer.close();
                }
            } else {
                Log.e("TAG", "Error requesting visible circles: " + peopleData.getStatus());
            }
        }
    });
    
    // Share
    Intent shareIntent = new PlusShare.Builder(MainActivity.this).setType("text/plain").setText("Welcome to the Google+ platform.").setContentUrl(Uri.parse("https://developers.google.com/+/")).getIntent();
    startActivityForResult(shareIntent, 0);

    GoogleApiClient 를 이용하여 로그인 된 계정의 정보와 서클(친구) 목록에 있는 사람들의 정보를 불러올 수 있고 Intent 를 통해 사용자의 구글+ 에 게시글을 올릴 수 도 있다.


Summary

구글 플레이 서비스 API 를 이용하여 게임, 드라이브, 구글+ 등 다양한 구글의 서비스와 연동한 앱을 만들 수 있지만, 트위터, 페이스북 SDK 처럼 사용자의 게시글 내용, 뉴스피드, 검색 결과와 같은 정보는 불러올 수 없는 듯 하다. 따라서 구글+ 자체를 활용하는 어플리케이션에는 적합하지 않고, 다른 구글 서비스와 연동하여 보조적으로 사용해야 할 것 같다.

 

댓글 남기기