페이지

레이블이 Google Drive인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Google Drive인 게시물을 표시합니다. 모든 게시물 표시

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의 모든 기능을 논의하고 있고 기능 사용법에 대해 각 언어별로 예제를 제공한다.

Drive SDK로 무엇을 할 수 있을까?


Drive SDK는 클라이언트 라이브러리 API, 언어별 예제, Drive와 통합된 앱을 개발하는 것을 도와주는 문서를 제공한다.

Drive 앱의 주요 기능은 Google Drive에서 파일을 다운로드하거나 업로드하는 것이다. 그러나, Drive SDK는 저장 공간 이상의 것을 제공한다. 이 페이지에서는 그러한 기능들을 설명하고 당신이 앱에 이것을 만들도록 해주는 SDK 리소스로 안내한다.

주: Drive SDK를 가지고 Google Drive 파일과 폴더에 작업할 때 당신은 파일 ID 기반 모델 - 전통적인 폴더 구조가 아니라 - 을 사용할 것이다. 더 많은 정보는 Work with Folders 와 Manage File Metadata를 참조하라.

목차

  • Drive UI에서 직접 파일을 생성하고 열기
  • 파일 검색
  • Google Drive를 통한 배포와 판매
  • 공유와 협업
  • 숏컷과 Google Picker를 사용해서 파일을 생성하고 열기
  • Google 문서를 내보내고 변환

Drive UI에서 직접 파일을 생성하고 열기

앱은 Drive UI에서 직접 파일을 생성하고 열 수 있다. 사용자가 Drive App을 설치하고 파일에 접근할 권한을 가진 후, 앱은 MIME 타입이 할당된 파일에 Google Drive의 컨텍스트 메뉴로 Open with에 표시된다. 예를 들면, Drive 이미지 편집기인 Aviary가 PNG 파일을 열기 위해 등록되어 있다면 사용자들은 아래와 같이 메뉴 옵션에서 선택할 수 있다.


사용자들은 올바른 MIME 타입 또는 기본적인 접근을 위해 확장자를 등록한 앱이 제공되면 기본적으로 어떤 Drive 앱으로 어떤 파일을 열 수 있다. 더 많은 정보는 Setting default and secondary MIME types and extensions를 참조하라.

Google Drive의 Create 메뉴는 통합 UI를 지원하는 설치된 앱이 새로운 파일을 생성하게 해준다. 예를 들어, Floorplanner 또는 Gantter를 사용해서 새로운 파일을 생성하기 위해서 사용자는 아래에서 보이는 것처럼 Create 메뉴에서 해당하는 아이콘을 클릭하면 된다.


애플리케이션을 위한 이러한 기능을 구현하는 것에 대한 추가 정보는 Open files와 Create a new file from the Drive UI를 참조하라.

파일 검색

Drive는 대부분의 일반적인 파일 타입(.html, .xml, .txt 등) 컨텐츠를 업로드하자마자 검색을 위해 인덱싱한다. Drive는 이미지나 PDF 파일의 텍스트를 찾기 위해 OCR을 사용하고 식별 가능한 객체, 사람, 장소를 분석하고 인덱스하기 위해 “Google Goggles”를 사용한다. 그림이나 독특한 파일 타입 같은 리소스를 위해 앱은 Drive에 파일을 저장할 때 인덱스할 수 있는 텍스트를 제공할 수 있다.

Google Drive에 파일을 추가하고 수정할 때 개발자는 인덱스하기 위한 텍스트를 제공할 수 있다. 이 텍스트는 Google Drive가 컨텐츠를 자동적으로 인덱싱할 수 없는 파일을 검색하기 위해 인덱스될 수 있다.

files.list 또는 children.list를 사용하는 Drive API의 메소드로 파일을 검색할 수 있다 -- 상세한 내용은 Searching for files를 참조하라.

Google Drive를 통한 배포와 판매

Chrome web store에 있는 것은 웹앱의 설치, 배포, 판매를 위한 Chrome Web Store에 Drive 앱이 접근하게 해준다. 특히, Drive를 사용한 앱들은 Google Drive 안의 Connect apps to Drive 다이얼로그에서 찾을 수 있다.


당신의 앱이 세상에 배포될 준비가 되었을 때 Chrome Web Store의 리스트는 사용자들이 그 앱을 필요로하고 원할 때 찾을 수 있도록 도와줄 것이다. Create a listing과 Help users find your app에서 추가 정보를 참조하라.

공유와 협업

Google Drive 앱은 파일에 대한 권한과 공유 설정을 관리할 수 있다. 또한, 앱은 Drive에서 공유하고 있는 문서에서 협업을 할 수 있도록 파일에 대한 주석을 쓰고 논의를 할 수 있다. 이 기능에 대한 추가 정보는 Share files와 Manage Comments and Discussions를 참조하라.

Permissions feed를 사용하는 API를 통해서 권한을 관리하는 것뿐만 아니라 앱은 사용자들이 파일을 공유하게 해주는 표준 Google Drive 공유 다이얼로그를 열 수 있다. 앱은 간단한 JavaScript를 애플리케이션 코드에 추가해서 Launching the Google Drive sharing dialog in your app에서 설명한 것처럼 이것을 구현할 수 있다.

숏컷과 Google Picker를 사용해서 파일을 생성하고 열기

Drive 파일은 Drive UI에서 독립된 애플리케이션에서 열 수 있다. 애플리케이션은 Open files using the Google Picker에서 설명한 것처럼 Google Picker를 사용해서 파일 목록을 가져오고 보여줄 수 있다.


또한 애플리케이션은 다른 데이터 저장 공간 또는 클라우드 저장 시스템같은 Drive 외부에서 저장된 데이터에 대한 숏컷을 만들 수 있다. 만약 당신이 파일이나 파일같은 리소스를 어떠한 이유에서 Drive의 외부에 저장할 필요가 있다면 숏컷은 Google Drive에서 그것들을 목록에 나열할 수 있게 해준다.

숏컷은 파일처럼 동작한다. 숏컷은 열거나 생성될 수 있고 검색을 위해 인덱싱되고 다른 사용자와 공유될 수 있다. 일반적인 파일과 다르게, 숏컷은 어떠한 내용도 없고 데스크톱과 동기화될 때 URL로써 사용자의 브라우저에서 열린다. 동기화된 숏컷 파일은 .glink 확장자가 할당된다.

숏컷에 대한 추가 정보와 샘플 코드는 Create a shortcut to a file을 참조하라.

Google 문서를 내보내고 변환

Drive SDK는 Google 스프레드시트, 프리젠테이션, 도큐먼트, 드로잉같은 네이티브 Google Docs 타입과 개발자가 상호 작용하게 해준다. 예를 들어, 당신의 애플리케이션이 PDF를 열도록 설정되어 있다면 Google 도큐먼트는 PDF로 내보낼 수 있기 때문에 사용자는 그러한 문서를 열기 위해 당신의 애플리케이션을 사용할 수 있다.

지원되는 형식과 Google 문서를 내보내고 변환하는 것에 대한 추가 정보는 Open and convert Google Docs in your app을 참조하라.