google cloud print in android

Post on 12-Jan-2017

955 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

GOOGLE CLOUD PRINT IN ANDROID

GVHD: Nguyễn Trần Thi VănSV thực hiện: 1. Nguyễn Xuân Bàng2. Từ Quốc Lân

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM KHOA CÔNG NGHỆ THÔNG TIN

2 Các nội dung chính

I. Cloud và Google Cloud PrintII. Sơ đồ hoạt động Google Cloud Print (GCP)III. Các service interfaces

1. Submitting jobs2. Receiving jobs3. Sharing printers

IV. Tìm hiểu về JSONV. Hiện thực các bước bằng code

I. Cloud và Google Cloud Print

Định nghĩa: Cloud:

3

4 I. Cloud và Google Cloud Print

Google Cloud Print:1. Là dịch vụ web được phát triển bởi Google2. Người dùng có thể tương tác với các máy in thông

qua tài khoản Google3. Cho phép tương tác các máy in với tài khoản đó.4. Khi nhận lệnh in từ người dùng, GCP xác định

máy in thích hợp để thực thi

5 I. Cloud và Google Cloud Print

Google Cloud Print:

6 II. Sơ đồ hoạt động

1. Xác thực

2. Sử dụng dịch vụ

1. Xác thực

7 1. Xác thực bằng việc đăng nhập (ClientLogin authorization )

“ClientLogin” có thể được sử dụng với bất kỳ ứng dụng nào có thể tạo yêu cầu HTTP POST.

Với URL yêu cầu: https://www.google.com/accounts/ClientLogin

Theo sau URL trên là các đối số

8

Đối số Mô tảaccountType

Loại tài khoản yêu cầu các thực. Dùng “HOSTED_OR_GOOGLE” nếu là tài khoản Google

Email Địa chỉ email đầy đủ (example@gmail.com)

Passwd Mật khẩu người dùng

service Tên dịch vụ yêu cầu xác thực. Google Calendar là 'cl‘, Google Cloud Print là ‘cloudprint’…

source Xác định ứng dụng người dùng. Mẫu : “tenCongTy-tenUngDung-phienBan”

logintoken (tùy chọn) Nếu đăng nhập thất bại. Lần sau bạn phải nhập chuỗi này.

logincaptcha

(tùy chọn) Chuỗi người dùng nhập để trả lời CAPTCHA

1. Xác thực bằng việc đăng nhập (ClientLogin authorization ) (tt)

9

Ví dụ:

https://www.google.com/accounts/ClientLogin?accountType=HOSTED_OR_GOOGLE&Email=exapmle@gmail.com&Passwd=north23AZ&service= cloudprint&source=UTE-App-1.0&logintoken=DQAAAGgA...dkI1LK9&logincaptcha=brinmar

101. Xác thực bằng việc đăng nhập (ClientLogin authorization ) (tt)

Hồi đáp của Google cho một yêu cầu xác thực: HTTP 200, nếu thành công

HTTP/1.0 200 OKSID=DQAAAGgA...7Zg8CTNLSID=DQAAAGsA...lk8BBbGAuth=DQAAAGgA...dk3fA5N

HTTP 403, nếu thất bại

HTTP/1.0 403 Access ForbiddenError=BadAuthentication

Tham khảo các lỗi: https://developers.google.com/accounts/docs/AuthForInstalledApps#Request

11 II. Sơ đồ hoạt động

1. Xác thực

2. Sử dụng dịch vụ

2. Sử dụng dịch vụ

12 2. Sử dụng dịch vụ GCP

Khi xác thực thành công, chúng ta có thể gọi các giao diện dịch vụ mà GCP cung cấp. Có 3 loại chính: Submitting print jobs Receiving print jobs Sharing printers

13 III. Các service interfaces1. Submitting Jobs

-Gồm 5 interfaces sau: /submit: gửi một lệnh in đến GCP /deleteJob: xóa một máy in xác định nào đó /jobs: lấy danh sách các lệnh in /printer: lấy tất cả các thuộc tính của máy in xác

định /search: danh sách các máy in xử dụng gần đây

-Cách sử dụnghttps://www.google.com/cloudprint/submit?paramters

14

-Ví dụ: https://www.google.com/cloudprint/submit?printerid=_google_doc_&title=TieuDe&ticket=aTicket&content=NoiDung&contentType=image/png

Đối số Mô tả

printerid * Mã máy in được tạo bởi GCP, được lấy nhờ vào /seacrch

title * Tiêu đề lệnh in

ticket * Gồm các thẻ theo định dạng CJT

content * Nội dung cần in, có thể là chuỗi hoặc một tập tin

contentType

(tùy chọn) loại tài liệu theo chuẩn MIME

tag (tùy chọn) được thêm vào lệnh in, hữu ích trong việc gửi và nhận lệnh in trong tương lai

1./submit

15

- Hồi đáp từ GCP:+ Là một đối tượng JSON+ Chứa:

Biến Boolean chỉ ra kết quả submit XSRF token được sử dụng Danh sách các đối số kèm theo với yêu cầu

16

- Hồi đáp từ GCP:+Là một đối tượng JSON+Chứa:

Biến Boolean chỉ ra kết quả xóa Một tin nhắn kèm theo XSRF token được sử dụng Danh sách các đối số kèm theo với yêu cầu

Đối số Mô tả

jobid * Mã máy in cần xóa,

2./deleteJobs

2./jobs17

Đối số Mô tảprinterid (tùy chọn) Tìm những lệnh in theo mã máy in

owner (tùy chọn) Chỉ ra tài khoản nào sở hữu máy in

status (tùy chọn) Trạng thái hiện tại của việc in (QUEUED, IN_PROGRESS, DONE, ERROR, SUBMITTED, HELD)

q (tùy chọn) Tiêu đề hoặc thẻ (tag) có chứa chuỗi q này

offset (tùy chọn) Tìm tại offset cho trước

limit (tùy chọn) Giới hạn số lệnh cần tìm

sortorder (tùy chọn) Chỉ tiêu sắp xếp: CREATE_TIME, CREATE_TIME_DESC, STATUS, …, TITLE, …

18 2./jobs-Hồi đáp từ GCP:

Là một đối tượng JSONChứa:

Giá trị Boolean chỉ ra kết quả tìm Danh sách các đối số kèm theo với yêu cầu Danh sách các lệnh in, với mỗi lệnh (id, printerid,

printerName, title, contentType, fileUrl, ticketUrl….)

19 3./printer

Đối số Mô tả

printerid * Mã máy in

use_cdd Nếu = true, lấy về tất cả các đặc tính máy in này

extra_fields

Bao gồm các thuộc tính mở rộng như: connectionStatus…

20 3./printer-Hồi đáp từ GCP:

Là một đối tượng JSONChứa:

Giá trị Boolean chỉ ra kết quả tìm Danh sách các đối số kèm theo với yêu cầu Danh sách các thuộc tính của máy in đó (id, name,

defaultDisplayName, displayName, description, type, proxy , createTime,….)

21 2./jobs

Đối số Mô tả

printerid * Mã máy in

use_cdd Nếu = true, lấy về tất cả các đặc tính máy in này

extra_fields

Bao gồm các thuộc tính mở rộng như: connectionStatus…

22

Đối số Mô tả

printerid (tùy chọn) Tìm những lệnh in theo mã máy in

owner (tùy chọn) Chỉ ra tài khoản nào sở hữu máy in

status (tùy chọn) Trạng thái hiện tại của việc in (QUEUED, IN_PROGRESS, DONE, ERROR, SUBMITTED, HELD)

q (tùy chọn) Tiêu đề hoặc thẻ (tag) có chứa chuỗi q này

offset (tùy chọn) Tìm tại offset cho trước

limit (tùy chọn) Giới hạn số lệnh cần tìm

sortorder (tùy chọn) Chỉ tiêu sắp xếp: CREATE_TIME, CREATE_TIME_DESC, STATUS, …, TITLE, …

4./search

23 2. Receiving Print Jobs

Mục đích: sẽ giúp các nhà phát triển phần mềm xây dựng các máy in và phần mềm in tích hợp các giải pháp của họ với dịch vụ Google Cloud Print để cho phép máy in của mình nhận được công việc từ Google Could

Các bước thực hiện Các Interfaces

24 Các bước thực hiện

- Bước 1: Đăng ký máy in+ Chuẩn bị các máy in ở trạng thái sẵn sàng để có thể đăng ký với GCP(Google Cloud Print)+  Sử dụng kết nối GCP của Google Chrome để đăng ký máy in (đối với máy in cổ điển)

25 Các bước thực hiện- Bước 2: Máy in xử lý+ Đồng bộ hóa với việc đăng ký GCP: Kiểm tra các dich vụ Cloud Print và đồng bộ trạng thái và tính năng của máy in với danh sách của Cloud+ Cập nhật máy in : Nếu một máy in đã được đăng ký, nhưng thông tin về nó đã thay đổi vì các lỗi, nâng cấp hoặc có sự cố, chúng ta có thể sử dụng interface /update để sửa lại các trường đã được thiết lập lúc đăng ký

26 Các bước thực hiện- Bước 3: Xử lý công việc in+ Nhận thông báo: Máy in sẽ nhận thông báo từ dịch vụ Google Cloud Print thông qua một kết nối+ Lấy công việc in: Máy in sẽ sử dụng interface /fetch để lấy tất cả các công việc có sẵn trong hàng đợi+ Xử lý việc in: Sử dụng interface /control để kiểm soát tình trạng của việc in ấn

28 1./control- Phiên bản GCP 2.0

Đối số Mô tả

jobid  Xác định công việc duy nhất( được tạo ra bởi server)

semantic_state_diff Sử dụng để cập nhật trạng thái và số lượng của các trang in

- Các phiên bản < GCP 2.0: có 4 đối số+ jobid+ status+ code+ message

29- Hồi đáp từ GCP+ Là 1 chuỗi JSON+ Chứa: biến Boolean để chỉ ra kết quả submit một tin nhắn token XSRF sử dụng một danh sách các đối số yêu cầu các đối tượng công việc cập nhật+ Ví dụ:

30 2./deleteĐối số Mô tả

printerid  Xác định máy in duy nhất( được tạo ra bởi Google Cloud Print)

- Hồi đáp từ GCP+ Là 1 chuỗi JSON+ Chứa:• biến Boolean để chỉ ra kết quả submit• một tin nhắn• token XSRF sử dụng• một danh sách các đối số yêu cầu+ Ví dụ:

31 3./fetchĐối số Mô tả

printerid  Xác định máy in duy nhất( được tạo ra bởi Google Cloud Print)

- Hồi đáp từ GCP+ Là 1 chuỗi JSON+ Chứa:• biến Boolean để chỉ ra kết quả submit• một danh sách các đối số yêu cầu• một danh sách các công việc

32+ Ví dụ :

33 4./listĐối số Mô tả

proxy Xác định các proxy

extra_fields  Danh sách các trường bổ sung được ngăn cách bỡi dấu phẩy

- Hồi đáp từ GCP+ Là 1 chuỗi JSON+ Chứa:• biến Boolean để chỉ ra kết quả submit• một danh sách các đối số yêu cầu• một danh sách các đối tượng máy in

34 + Ví dụ :

35 5./registerĐối số Mô tả

name Tên hệ thống của máy in (không cần phải là duy nhất)

default_display_name

Tên của máy in sẽ được hiển thị cho người sử dụng

proxy  Xác định các máy in client hoặc proxy (nhiều máy in có thể chia sẻ cùng proxy)

uuid  Nhà sản xuất-cung cấp số serial của máy in

manufacturer  Tên của các nhà sản xuất máy in

model  Mô hình máy in.

gcp_version  Phiên bản của giao thức GCP máy in hỗ trợ, ví dụ như "2.0"

setup_url  URL hướng dẫn cài đặt máy in.

support_url  URL mà người dùng sẽ đi tới nếu họ có nhu cầu hỗ trợ

36Đối số Mô tả

update_url URL mà người dùng sẽ được dẫn đến máy in nếu cần một bản cập nhật firmware

firmware  Phiên bản firmware của máy in

local_settings  Thiết lập cục bộ của máy in

semantic_state  Trạng thái hiện tại của máy in

capabilities  Tính năng của máy in

defaults  Thiết lập máy in mặc định

tag  Tag thêm vào máy in

data  Dữ liệu cá nhân them vào máy in

37- Hồi đáp từ GCP+ Là 1 chuỗi JSON+ Chứa:• biến Boolean để chỉ ra kết quả submit• token XSRF sử dụng• một danh sách các đối số yêu cầu• một danh sách các máy in+ Ví dụ

38 6./updateĐối số Mô tả

printerid  Xác định máy in duy nhất (được tạo ra bởi Google Cloud Print)

name Tên hệ thống của máy in (không cần phải là duy nhất)

default_display_name

Tên của máy in sẽ được hiển thị cho người sử dụng

proxy  Xác định các máy in client hoặc proxy (nhiều máy in có thể chia sẻ cùng proxy)

uuid  Nhà sản xuất-cung cấp số serial của máy in

manufacturer  Tên của các nhà sản xuất máy in

model  Mô hình máy in.

gcp_version  Phiên bản của giao thức GCP máy in hỗ trợ, ví dụ như "2.0"

setup_url  URL hướng dẫn cài đặt máy in.

support_url  URL mà người dùng sẽ đi tới nếu họ có nhu cầu hỗ trợ

39Đối số Mô tả

update_url URL mà người dùng sẽ được dẫn đến máy in nếu cần một bản cập nhật firmware

firmware  Phiên bản firmware của máy in

local_settings  Thiết lập cục bộ của máy insemantic_state  Trạng thái hiện tại của máy in

capabilities  Tính năng của máy in

defaults  Thiết lập máy in mặc định

tag  Tag thêm vào máy in

remove_tag  Bỏ tag ra khỏi máy in

data  Dữ liệu cá nhân thêm vào máy in

remove_data  Bỏ dữ liệu cá nhân ra khỏi máy in

40- Hồi đáp từ GCP+ Là 1 chuỗi JSON+ Chứa:• biến Boolean để chỉ ra kết quả submit• một tin nhắn• token XSRF sử dụng• một danh sách các đối số yêu cầu• một đối tượng máy in được truy cập+ Ví dụ

41 3. Sharing Printers

- Mục đích: sẽ giúp các nhà phát triển phần mềm chia sẻ máy in kết hợp với một tài khoản xác thực- Các Interfaces: Gồm 2 interface /share : chia sẻ máy in với một phạm vi (người

dùng hoặc nhóm hoặc tên miền) /unshare : xóa một phạm vi của máy in

42 1./shareĐối số Mô tả

printerid  ID của máy in được chia sẻ

scope  Email của người dùng hoặc nhóm hoặc tên miền để chia sẻ máy in

role  Vai trò của người dùng hoặc nhóm được gán. Có thể là USER hoặc MANAGER

skip_notification   True để không gửi một email mời đến phạm vi các máy in được chia sẻ.

43- Hồi đáp từ GCP+ Là 1 chuỗi JSON+ Chứa:• biến Boolean để chỉ ra kết quả submit• một tin nhắn• token XSRF sử dụng• một danh sách các đối số yêu cầu

44 2./unshare

Đối số Mô tả

printerid  ID của máy in không được chia sẻ

scope  Email của người dùng hoặc nhóm hoặc tên miền để xóa chia sẻ từ máy in

-Hồi đáp từ GCP : giống hồi đáp của interface /share

Tài liệu tham khảo: https://developers.google.com/cloud-print/

45 IV. Tìm hiểu về JSON

JSON (JavaScript Object Notation) : là một dạng chuẩn để định dạng dữ liệu, nó có thể dùng để lưu trữ và trao đổi thông tin văn bản

Lợi ích của JSON: khi sử dụng JSON với JavaScript thì không cần phải có các bước phân tích phức tạp như đối với XML. Mà có thể truy vấn trực tiếp giá trị theo tên (khóa) được định nghĩa trong JSON.

JSON là một chuẩn cực kỳ quan trọng trong lập trình ở phía client

46 Ví dụ- Dữ liệu XML - Dữ liệu JSON

Sử dụng JavaScript để đọc dữ liệu

47 Các trường hợp nên sử dụng JSON

Lưu trữ dữ liệu đơn thuần, khi bạn muốn lưu trữ dữ liệu dưới dạng metadata ở phía server. Chuỗi JSON sẽ được lưu vào database và sau đó khi cần dữ liệu thì sẽ được giải mã

Sử dụng JavaScript để xử lý thông tin trả về từ phía server. Rất nhanh và rất dễ dàng.

48 IV. Hiện thực các bước bằng code1. Lấy chuỗi xác thực2. authorizeURL=“https

://www.google.com/accounts/ClientLogin?accountType=HOSTED_OR_GOOGLE&Email=exapmle@gmail.com&Passwd=north23AZ&service= cloudprint&source=UTE-App-1.0”

49 1. Lấy chuỗi xác thực

URL url = new URL(authorizeURL);HttpURLConnection connection = (HttpURLConnection)url.openConnection();InputStream inStream = connection.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(inStream));StringBuilder builder = new StringBuilder();String line;String response="";while ((line = reader.readLine()) != null) { builder.append(line); builder.append("\r\n");}response =builder.toString();

50 1. Lấy chuỗi xác thực

Sử dụng các hàm cắt chuỗi để lấy ra chuỗi xác thực: SID=DQAAAPMAAABoESaB7JK9JO0HA_eIboilyGYHusGp-

foFoMhIcoqGW14kIzN2Z8cIPHyAPodArKFPOZh8Nus_cLvSTskfYEqB-2UMbDFwTPqC3JF8OrOKq67MplcP7Q7YPfGU7XCwkaQYO9OCdrbSbtRYMK-GFognkBbPWwakQ-Mo-ffwrj1WABLz43MLWB98YQ4CHlomx7_ArQr3nvyXNiK81npMxvLU_BIah8xwWaozFgBwXVLRCjTimJ465Db7FPmK3gfstvkKY20LwWXiwN01Oxnomcx0Hd5_FvDd4PS6WQ2JflCYznqQb1tlHGeL1m42LFM-Zf2XOpiclnnzVWc4hdI9dRWw

LSID=DQAAAPYAAAD_NZjd5nek3rsve8tKyudZg1b0D4ZXvLVdDwOHpbCB3Qh_pThOlEMaBBkfKvfJowPOo8unKOQgAiZLGMclpvoet93FiadurjHZjwKqMsyh30xSl108kwI1RSj2D-uxxU9BwATebzS2DYCBQszvzLcR6QynUg2SbRT1ACqxeGcG4fNxu0189TrA3M9Jt251THwo9jmoTmJn0w0oL08ISWg2dUWOjygRUEU_BCR3uegjOgtNIpahGZFDikuDRu2sWekkEe25AK9G1_Ran-IcjrGUW6nx_BzRRH-ASVLcokk7uUL7aYh-GXUpO8qGLNsIPM6M-SPtiMk6vJq1-hbj21cv

Auth=DQAAAPYAAABjE_bOy282mO6DhHEjU-p4RbJi8eu-1z4qVjWcrY21QjzDcDuNyxgelHgwXYuZTf051uO3InL3T7RF3eJv9GltrB2YEWY43zLl0JhBCAU7wtc5xOUBNO4fgtJ0utdD4f2ffQZ0gG0ENXtUwueIe8jJaurF7631lHQlb23VBKPJzaoOTH54RlaybLJAQZsSGbgJcmJqLsea1BiTZsvrTtyFkd2ayvLVVg3NXBUbTwfla5usoHv6ZF_ZRDTFcpzsbJDNVmiM6P5EhN1mV9wK-QHXyc4XTU5auJaStAl72crTuOohGtWJB58dHqi_btne8A3f2XaUK1VNKQg4cnUbgg_W

51 2. Sử dụng dịch vụ

a . Gửi yêu cầu kèm theo mã xác thựchttps://www.google.com/cloudprint/submit?printerid=_google_doc_&title=TieuDe&ticket=aTicket&content=NoiDung&contentType=text/plain

Auth=DQAAAP…gg_W -> Kèm vào header

Application

Requests data with token

52 2. Sử dụng dịch vụ

b . Nhận kết quả hồi đáp

ApplicationResponds

{ success = true, message = Đã thêm lệnh in., xsrf_token = AIp06DiRHVMG46e5mcUfn5vjPbEUESFJNw:1417706784605}

53 2. Sử dụng dịch vụ

urlString=“https://www.google.com/cloudprint/submit?printerid=_google_doc_&title=TieuDe&ticket=aTicket&content=NoiDung&contentType=text/plain”

URL url = new URL(urlString);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.addRequestProperty("X-CloudPrint-Proxy", SERVICE_SOURCE_NAME);connection.addRequestProperty("Authorization", "GoogleLogin auth=“ + Auth);// sau đó lấy hồi đáp về từ kết nối này

54

THANK YOU

top related