+1

Sử dụng Google Sheet API Android

Giới thiệu

Giới thiệu Google Sheets API

Google Sheets API cho phép chúng ta có thể sửa và đọc bất các thành phần của spreadsheet. Spreadsheets có rất nhiều cài đặt hỗ trợ làm đẹp cho nó và các sheet chức năng, vậy API cũng có rấy nhiều các sitting đó. API cung cấp 2 cách để tương tác với các Spreadsheet:

Thêm thông tin về các bộ sưu tập và cách sử dụng của chúng, xem các link tài liệu tham khảo bên trên hoặc theo dõi hướng dẫn develop sau đây:

Common terms

Phần này sẽ giải thích về một số terms.

Spreadsheet ID

Tất cả các API method đều yêu cầu một parameter spreadsheetId. Nó dùng để nhận định ra chúng ta sẽ truy cập hoặc sửa đổi vào spreadsheer nào. Cái ID này là giá trị ở giữa "/d/" và "/edit" trong URL của spreadsheet. Ví rụ, Tham khảo URL sau của spreadsheet:

https://docs.google.com/spreadsheets/d/1qpyC0XzvTcKT6EISywvqESX3A0MwQoFDE8p-Bll4hps/edit#gid=0 ID của spreadsheet này là 1qpyC0XzvTcKT6EISywvqESX3A0MwQoFDE8p-Bll4hps. Nếu bạn đã quen với Drive API thì spreadsheet_id cũng là ID của file resource đó.

Sheet ID

Một sheet thường luôn luôn có tiêu đề và ID. SheetId là cái thường xuyên sử dụng trong các Sheet API để chỉ ra rằng cái sheet nào là sheet mà chúng ta sẽ đọc hoặc update lên nó. Trong các Sheets UI, bạn có thể tìm thấy sheetId của sheet đang mở trong spreadsheet URL. Xem URL sau để biết được sheet ID:

https://docs.google.com/spreadsheets/d/spreadsheetId/edit#gid=sheetId Bạn cũng có thể lấy các sheet ID sử dụng API, tham khảo thêm tại đây: https://developers.google.com/sheets/samples/sheet#determine_sheet_id_and_other_properties.

Ký hiệu Cell

Một số phương thức API yêu cầu một range trong A1 notation. Đây là một chuỗi giống như Sheet1!A1:B2, nó đề cập tới một nhóm các ô trong spreadsheet và thường được sử dụng với các công thức. Ví dụ:

  • Sheet1!A1:B2 Nói tới 2 ô đầu tiên trên top của 2 hàng trên đỉnh của sheet1
  • Sheet1!A:A Ý nóitất cả các ô trong cột đầu tiên của Sheet1
  • Sheet1!1:2 Nói tới tất cả các ô trong 2 hàng đầu của Sheet1
  • Sheet1!A5:A Ý là tất cả các ô của cột đầu tiên của sheet1, từ dòng thứ 5 trở đi.
  • A1:B2 2 ô đầu tiên của 2 dòng trên cùng của sheet đầu tiên tồn tại trong spreadsheet file.
  • Sheet1 ý là tất cả các ô trong Sheet1.

*Chú ý là trường hợp tên range conflicts với tên sheet thì tên của range sẽ được ưu tiên.

Date/Time

Google sheet cũng giống như hầu hết các ứng dụng spreadsheet khác, đều cho phép bạn điều chỉnh các giá trị date/time như các giá trị thập phân. Điều này cho phép bạn có thể thực hiện các phép toán số học trên chúng trong công thức, vì vậy bạn có thể tăng các ngày hay các tuần, cộng hoặc trừ hay date/time và thực hiện các thao tác tương tự khác.

Thành phần Respone

Spreadsheets lớn và bạn thường xuyên không sử dụng hết tất cả các phần của spreadsheet. Bạn có thể giới hạn những cái trả về của Google Sheets API phản hồi, sử dụng các URL parameter. Nó đặc biệt hữu ích trong các method spreadsheet.get. Để hiệu năng là tốt nhất thì các list giá trị trả về chỉ nên bao gồm các giá trị mà bạn cần. Định dạng của các trường parameter giống như JSON encoding of FieldMask. Cho ví dụ luôn cho dễ hiểu, để lấy title của spreadsheet, properties của sheet và giá trị và định dạng của range A1:C10 bạn có thể sử dụng request sau:

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId?ranges=A1:C10&fields=properties.title,sheets(sheetProperties,data.rowData.values(effectiveValue,effectiveFormat))

Ví dụ

Điều kiện tiên quyết

  • Android Studio SDK 1.2 hoặc mới hơn.
  • Android SDK packages API 23 hoặc cao hơn, bao gồm versions mới nhất của Google Repository, Android
  • Support Library và Google Play Services.
  • Device có thể truy cập Internet.
  • Một tài khoàn Google.

Step 1: Lấy SHA1 fingerprint

Trong terminal, chạy Keytool utility để lấy SHA1 fingerprint, cái này sau chúng ta sẽ dùng để bật API.

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v When asked for a keystore password, enter "android"

Keytool sẽ in ra fingerprint. Ví dụ:

$ keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v Enter keystore password: Type "android" if using debug.keystore Alias name: androiddebugkey Creation date: Dec 4, 2014 Entry type: PrivateKeyEntry Certificate chain length: 1 Certificate[1]: Owner: CN=Android Debug, O=Android, C=US Issuer: CN=Android Debug, O=Android, C=US Serial number: 503bd581 Valid from: Mon Aug 27 13:16:01 PDT 2012 until: Wed Aug 20 13:16:01 PDT 2042 Certificate fingerprints: MD5: 1B:2B:2D:37:E1:CE:06:8B:A0:F0:73:05:3C:A3:63:DD SHA1: D8:AA:43:97:59:EE:C5:95:26:6A:07:EE:1C:37:8E:F4:F0:C8:05:C8 SHA256: F3:6F:98:51:9A:DF:C3:15:4E:48:4B:0F:91:E3:3C:6A:A0:97:DC:0A:3F:B2:D2:E1:FE:23:57:F5:EB:AC:13:30 Signature algorithm name: SHA1withRSA Version: 3

Copy SHA1 fingerprint.

Important: Khi bạn tạo một app, ban không nên sử dụng debug keystore. Để biết thêm, xem https://developer.android.com/tools/publishing/app-signing.html.

Step 2: Turn on the Google Sheets API

  • Sử dụng wizard để tạo hoặc chọn một project trong the Google Developers Console và tự động bật API. Click Continue, sau đó vào credentials.
  • Trên đầu trang, chọn tab OAuth consent screen. Chọn một địa chỉ Email, nhập tên Product nếu chưa có và click Save.
  • Chọn tab Credentials, click tới nút Create credentials và chọn OAuth client ID.
  • Chọn loại ứng dụng Android.
  • Copy SHA1 fingerprint từ Step 1 vào Signing-certificate fingerprint.
  • Trong Package name, nhập tên package của project của bạn vào
  • Click Create

Step 3: Create a new Android project

Mở Android Studio, và bắt đầu Project mới. Tên ứng dụng: ExelManager Chú ý tên đặt company domain sao cho giống với cái package đã nhập ở bước 2 nhé.

Step 4: Prepare the project

Mở file build.gradle(là cái file mà có dòng com.android.application nhé):


dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.2.1'
    compile 'com.google.android.gms:play-services-identity:8.4.0'
    compile 'pub.devrel:easypermissions:0.1.5'
    compile('com.google.api-client:google-api-client-android:1.22.0') {
        exclude group: 'org.apache.httpcomponents'
    }
    compile('com.google.apis:google-api-services-sheets:v4-rev6-1.22.0') {
        exclude group: 'org.apache.httpcomponents'
    }

Chọn Tools > Android > Sync Project with Gradle Files

Mở file AndroidManifest.xml và thay nội dung phù hợp với code sau:

 <?xml version="1.0" encoding="utf-8"?>
<manifest package="com.tungdominico.exelmanager"
          xmlns:android="http://schemas.android.com/apk/res/android">

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version"/>
    </application>

</manifest>

Step 5: Setup the sample

Vào viết code trong MainActivity.java thôi. Trong ví dụ của google đã ví dụ cho các bạn về get data từ spreadsheet rồi, giờ mình viết một demo về update data thôi. Dưới đây là đoạn code update:

private void updateValue(String rangeCell, String sheetName) throws IOException {
            String range = sheetName + "!" + rangeCell;
            // Row  1
            List<Object> listvalue = new ArrayList<>();
            listvalue.add("Alo");
            listvalue.add("12121212");
            listvalue.add("222222222");
            // Row 2
            List<Object> listvalue2 = new ArrayList<>();
            listvalue2.add("111212");
            listvalue2.add("1111111sdsdsd");
            listvalue2.add("hhhhhhhhhhhhhdfdfdf");
            List<List<Object>> values1 = new ArrayList<>();
            values1.add(listvalue);
            values1.add(listvalue2);
            ValueRange valueRange = new ValueRange();
            valueRange.setMajorDimension("ROWS");
            valueRange.setRange(range);
            valueRange.setValues(values1);
            UpdateValuesResponse response = mService.spreadsheets().values().update
                (SPREADSHEET_ID,
                    range, valueRange).setValueInputOption("USER_ENTERED").execute();
        }

Trên đây là đoạn mình update data lên spreadsheet file. Còn các đoạn khởi tạo khác bạn tham khảo ví dụ của google nhé. À đừng quên update lại cái Scope = SheetsScopes.SPREADSHEETS là ok.

Đây là demo của mình, bạn có thể chạy và kiểm tra file spreadsheet ở đây nhé:

https://docs.google.com/spreadsheets/d/1LV1-SfgEhT-UeObV55nwQqMqWy6Le4vOsgh9wvOqlZM/edit#gid=0

Link download APK: https://drive.google.com/file/d/0B7td9WR1ZtQ0TkJBRjFLY2VxczA/view?usp=sharing

Nguồn tham khảo: https://developers.google.com/sheets


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí