Upload
cong-thanh-nguyen
View
955
Download
2
Embed Size (px)
Citation preview
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 đủ ([email protected])
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 protected]&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
27 Các InterfacesGồm 6 interface /control : kiểm soát tình trạng của công việc in ấn /delete : xóa một máy in từ Google Cloud Print /fetch : lấy các công việc kế tiếp do máy in quy
định /list : cung cấp một danh sách các máy in của người
dùng /register: đăng ký máy in /update : cập nhật các thuộc tính và thông số của
máy in đã đăng ký với Google Cloud Print
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 protected]&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