2013-03-26 29 views
6

Tôi sử dụng thông tin đăng nhập google thông qua trình quản lý tài khoản trong ứng dụng Android của tôi. Tôi có thể nhận được accesstoken mà tôi gửi đến máy chủ và máy chủ có thể tạo/đăng nhập người dùng mới. Accesstoken chỉ hợp lệ 3600 giây. Vấn đề là máy chủ không thể cập nhật thông tin của người dùng sau khi hết thời gian này. Ứng dụng web yêu cầu định kỳ thông tin người dùng kiểm tra.Mã thông báo làm mới tài khoản (truy cập ngoại tuyến)

Làm cách nào để nhận mã thông báo xác thực và mã thông báo làm mới từ trình quản lý tài khoản Android để máy chủ có thể sử dụng mã thông báo làm mới để cập nhật dữ liệu định kỳ? Tôi không muốn sử dụng đăng nhập thông qua webview trong ứng dụng Android.

Cảm ơn

Trả lời

5

này bây giờ có thể: https://developers.google.com/+/mobile/android/sign-in#server-side_access_for_your_app

Bạn yêu cầu mã ủy quyền một lần, gửi nó tới máy chủ của bạn và trao đổi máy chủ của bạn nó cho một access token và làm mới token.

+1

Hi ade, tôi làm theo hướng dẫn nhưng tôi không hiểu nơi tôi có thể tìm ra "mã ủy quyền một lần "tôi phải gửi tới máy chủ của mình để nhận mã thông báo làm mới. Bạn có thể giúp tôi được không? – Meroelyth

3

Hiện tại bạn không thể, điều mà tôi chắc chắn không phải là câu trả lời bạn mong đợi, xin lỗi về điều đó! Nếu bạn có đăng nhập web, bạn có thể sử dụng luồng hỗn hợp để nhận mã thông báo làm mới trên máy chủ (xem https://developers.google.com/+/web/signin/server-side-flow), nhưng không có cách nào lấy mã như một phần của luồng Android hoặc iOS.

Nếu đây là thứ bạn cần cho trường hợp sử dụng, bạn có thể gửi yêu cầu tính năng tại đây: https://code.google.com/p/google-plus-platform/issues - chúng tôi đang tích cực xem xét số lượng sao trên đó để đánh giá nhu cầu về các tính năng khác nhau.

+0

Tôi chỉ nghe nói rằng –

0

ủy quyền của Google quá trình thông qua quản lý tài khoản:

Email id có thể nhận được từ

AccountManager accountManager = AccountManager.get(getApplicationContext()); 
Account[] accounts = accountManager.getAccountsByType("com.google"); 
String emailID = accounts[0].name; // you can retrieve using google account chooser way also 

Những dòng này nên được chạy trong thẻ riêng biệt (không có trong thread UI).

String scope = "oauth2:https://www.googleapis.com/auth/userinfo.profile https://gdata.youtube.com"; 
String accessToken = GoogleAuthUtil.getToken(mContext, emailID, scope); 

lưu accessToken và sử dụng để truy cập api của bạn.

Sau một giờ (tức là 3600 giây), chúng tôi cần làm mới mã thông báo truy cập. Nhưng bây giờ google không hỗ trợ truy cập sau một giờ. Chúng tôi phải khởi động lại ứng dụng và sử dụng các dòng sau để nhận mã thông báo truy cập.

String scope = "oauth2:https://www.googleapis.com/auth/userinfo.profile https://gdata.youtube.com"; 
String accessToken = GoogleAuthUtil.getToken(mContext, emailID, scope); 

sợi nền này sẽ luôn chạy ở chế độ nền trong khi vòng lặp

+1

Dù sao, bạn không nên sử dụng Thread.sleep() trên chuỗi nền trên Android. Chủ đề là một nguồn tài nguyên đắt tiền. Lập lịch mã của bạn trên Trình xử lý hoặc dịch vụ nền được kích hoạt bởi AlarmManager. – Renascienza

Các vấn đề liên quan