페이지

2013년 6월 15일 토요일

퀵스타트: 안드로이드에서 Drive App 실행하기


이 페이지의 나머지 부분에서 설명된 단계를 완료하면 간단한 Drive 앱을 완성하고 Google Drive에 사진을 업로드할 것이다. 만약 당신이 좋아한다면 Google 엔지니어가 이 단계들을 안내하는 동영상을 볼 수 있다.


  • 1단계: 인증서 생성(SHA1)
  • 2단계: Drive API 활성화
  • 3단계: 안드로이드 프로젝트 생성 및 설정
  • 4단계: 샘플 설정
  • 5단계: 샘플 실행
  • 옵션: 퀵스타트 비디오 보기
  • 다음 단계


이 단계들을 완료하기 위한 요구 사항은 다음과 같다:


  • 인터넷 연결과 브라우저.
  • Drive가 활성화된 Google 계정
  • Android SDK ADT 번들.
  • Google Play 서비스
  • Eclipse용 Google Plugin.


1단계: 인증서 생성(SHA1)


Google은 애플리케이션에 의해 정의된 패키지 이름과 SHA1 인증서가 일치시켜서 Android 디바이스에서 보내진 API 요청을 검사한다.


당신은 터미널에서 keytool 명령으롤 아래와 같이 사용해서 SHA1 인증서를 만들 필요가 있다.



keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v


주: Eclipse에서 디버그 키스토어는 보통 ~/.android/debug.keysotre에 위치하고 있는데 이 위치는 당신의 환경에 따라 달라질 수 있다. 만약 그런 경우라면 디버그 키스토어를 당신에게 맞게 대체해야 한다.

당신은 키스토어의 암호를 입력하게 될 것이다. 디버그 키스토어의 기본 암호는 android이다.

keytool은 쉘에 fingerprint를 출력한다. 예를 들면 다음과 같다:


Certificate fingerprints:
 SHA1: 21:45:BD:F6:98:B8:71:50:39:BD:0E:83:F2:06:9B:ED:43:5A:C2:1C

이 fingerprint 문자열을 유지해서 2단계에 입력하여 Drive API를 활성화하라.

2단계: Drive API 활성화

당신의 앱을 위한 Drive API를 활성화할 필요가 있다. 당신은 Google APIs Console에서 당신 앱의 API 프로젝트에서 이것을 할 수 있다.

1. Google APIs Console에서 API 프로젝트를 생성한다.
2. API 프로젝트의 Services 탭을 선택하고 Drive API를 활성화한다.
3. API 프로젝트의 API Access 탭을 선택하고 Create an OAuth 2.0 client ID를 클릭한다.
4. Branding Information 절에서 애플리케이션 이름(예를 들면, “Drive Quickstart Sample”)을 제공하고 Next를 클릭한다. 제공된 제품 로고나 홈페이지 URL은 옵션이다.
5. Client ID Settings 절에서 다음 사항을 하라:
a. Application type에서 Installed application을 선택한다.
b. Installed application type에서 Android를 선택한다.
c. Package name에 “com.example.drivequickstart”를 입력한다.
d. 1단계에서 만든 SHA-1 인증서를 Signing certificate fingerprint를 붙인다.
e. Create Client ID를 클릭한다.


3단계: 안드로이드 프로젝트 생성 및 설정

1. Eclipse에서 새로운 Android Application Project를 생성한다.
2. Application Name에 “Drive Quickstart”를 입력한다.
3. Target SDK API17:Android 4.2로 선택한다.
4. Compile WithGoogle APIs(Google Inc.) (API 17)를 선택한다.
5. 나머지 필드는 기본 값을 두고 Next를 클릭한다.
6. 모든 다른 페이지에서는 기본 값을 그대로 두고 Finish를 클릭하여 설정 마법사를 완료할 때까지 Next를 클릭한다.

다음 단계는 프로젝트에 Google Drive 클라이언트 라이브러리를 추가하는 것이다. Google Plugin for Eclipse는 이것을 매우 쉽게 만든다:

1, Google Plugin for Eclipse 드롭다운 메뉴에서 Add Google APIs를 선택한다.
2. 리스트에서 Drive API v2를 선택하고 Finish를 클릭한다.


마지막으로 당신은 안드로이드 프로젝트 빌드 경로에 Google Play Services 클라이언트 라이브러리가 추가되도록 할 필요가 있다.

1. Eclipse 메뉴에서 Project > Properties > Java Build Path > Libraries를 선택한다.
2. Add External JARs를 클릭한다.
3. <android-sdk-folder>/extras/google/google_play_services/libproject/google-play-services_lib/libs 폴더를 열고 google-play-services.jar를 선택하고 OK를 클릭한다.
4. Order and Export 탭에서 google-play-services.jar 파일이 체크되어있는지 확인한다.

4단계: 샘플 설정

프로젝트를 생성했을 때 MainActivity라는 액티비티가 자동으로 생성된다. 당신은 이 액티비티를 수정하고 Android manifest 파일에 권한을 추가할 필요가 있다.

1. MainActivity.java에 아래 코드를 복사한다.

package com.example.drivequickstart;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import android.accounts.AccountManager;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.widget.Toast;

import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential;
import com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException;
import com.google.api.client.http.FileContent;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;

public class MainActivity extends Activity {
  static final int REQUEST_ACCOUNT_PICKER = 1;
  static final int REQUEST_AUTHORIZATION = 2;
  static final int CAPTURE_IMAGE = 3;

  private static Uri fileUri;
  private static Drive service;
  private GoogleAccountCredential credential;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    credential = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE);
    startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
  }

  @Override
  protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    switch (requestCode) {
    case REQUEST_ACCOUNT_PICKER:
      if (resultCode == RESULT_OK && data != null && data.getExtras() != null) {
        String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
        if (accountName != null) {
          credential.setSelectedAccountName(accountName);
          service = getDriveService(credential);
          startCameraIntent();
        }
      }
      break;
    case REQUEST_AUTHORIZATION:
      if (resultCode == Activity.RESULT_OK) {
        saveFileToDrive();
      } else {
        startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
      }
      break;
    case CAPTURE_IMAGE:
      if (resultCode == Activity.RESULT_OK) {
        saveFileToDrive();
      }
    }
  }

  private void startCameraIntent() {
    String mediaStorageDir = Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_PICTURES).getPath();
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(new Date());
    fileUri = Uri.fromFile(new java.io.File(mediaStorageDir + java.io.File.separator + "IMG_"
        + timeStamp + ".jpg"));

    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
    startActivityForResult(cameraIntent, CAPTURE_IMAGE);
  }

  private void saveFileToDrive() {
    Thread t = new Thread(new Runnable() {
      @Override
      public void run() {
        try {
          // File's binary content
          java.io.File fileContent = new java.io.File(fileUri.getPath());
          FileContent mediaContent = new FileContent("image/jpeg", fileContent);

          // File's metadata.
          File body = new File();
          body.setTitle(fileContent.getName());
          body.setMimeType("image/jpeg");

          File file = service.files().insert(body, mediaContent).execute();
          if (file != null) {
            showToast("Photo uploaded: " + file.getTitle());
            startCameraIntent();
          }
        } catch (UserRecoverableAuthIOException e) {
          startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    });
    t.start();
  }

  private Drive getDriveService(GoogleAccountCredential credential) {
    return new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential)
        .build();
  }

  public void showToast(final String toast) {
    runOnUiThread(new Runnable() {
      @Override
      public void run() {
        Toast.makeText(getApplicationContext(), toast, Toast.LENGTH_SHORT).show();
      }
    });
  }
}





2. 당신은 AndroidManifest.xml 파일에 android.permission.GET_ACCOUNTS와 android.permission.INTERNET 권한을 추가할 필요가 있다.
  







5단계: 샘플 실행

인증서를 생성하고 Google API 프로젝트를 설정하고 샘플 소스 코드를 설정한 뒤에 샘플 실행 준비가 완료된다. 당신은 안드로이드 에뮬레이터나 설정된 디바이스를 사용해서 샘플을 실행할 수 있다.

처음 샘플을 실행할 때 당신의 Google 계정에 접근을 허용할 지 여부를 묻는다. 인증되면 Google Drive에 촬영한 사진을 업로드할 수 있다.

사진이 Drive에 업로드될 때, 새로운 사진을 촬영할 지 이 과정을 반복할 지 선택한다.

옵션: 퀵스타트 비디오 보기

진행중인 Drive Google Developers Live 세션의 비디오는 설정과 각각의 퀵스타트 샘플 실행을 상세히 다룬다. 만약 당신이 이것을 작성한 개발자에 의해 안드로이드 샘플 데모를 보고 싶다면 재생을 클릭하고 앉아서 즐겨라.




다음 단계


만약 당신의 목표가 당신의 앱을 사용해서 안드로이드 용 Drive 앱으로부터 직접 파일을 열도록 하는 것이라면 Integrate with Android Drive App을 참조하라.

만약 당신의 목표가 당신만의 설치된 애플리케이션에서 퀵스타트 샘플을 확장하는 것이라면 API Reference를 참조하라. API Reference는 Drive API의 모든 기능을 논의하고 있고 기능 사용법에 대해 각 언어별로 예제를 제공한다.

댓글 없음:

댓글 쓰기