Tôi đang tạo một ứng dụng Android mới sử dụng SyncAdapter
để xử lý đồng bộ hóa db. Tôi có mọi thứ tại chỗ và ứng dụng hoạt động tốt nhưng tôi nhận thấy rằng tôi đã đăng nhập hai lần.Đăng nhập hai lần khi sử dụng SyncAdapters
Lần đăng nhập đầu tiên diễn ra khi lớp AuthenticatorActivity
(mở rộng AccountAuthenticatorActivity
) xác thực người dùng và mật khẩu.
Nếu người dùng và mật khẩu là chính xác những AuthenticatorActivity
sau đó thực hiện:
- Nếu
account
không tồn tại nó tạo ra nó bằng cách sửmAccountManager.addAccountExplicitly()
- Các
authToken
được lưu sử dụngintent.putExtra(AccountManager.KEY_AUTHTOKEN, authToken);
này về cơ bản đã được sao chép/dán từ các mẫu Android, vì vậy tôi đoán nó là ok.
Vấn đề là khi SyncAdapter
ra mắt và sử dụng
authtoken = mAccountManager.blockingGetAuthToken(account,
AuthenticatorActivity.PARAM_AUTHTOKEN_TYPE, true);
Phương pháp getAuthToken()
bên trong lớp Authenticator
kéo dài AbstractAccountAuthenticator
được gọi. Và bên trong phương pháp này tôi lại nhấn điểm cuối đăng nhập một lần nữa.
Từ thời điểm đó trở đi điểm cuối đăng nhập không được nhấn lại cho đến khi authToken
hết hạn.
Đây không phải là điều làm phiền tôi nhiều nhưng tôi muốn biết nếu có cách nào để tránh đăng nhập hai lần.
Điều gì về việc sử dụng 'AccountManager.setAuthToken()' thay vì chuyển mã thông báo trở lại trong nhóm? – alexanderblom
@alexanderblom: Tôi đã thử điều đó. Không khác nhau. – Macarse
Tôi nghĩ lý do đằng sau hai lần đăng nhập là để đảm bảo mã thông báo xác thực được cập nhật, nhưng tôi không thể tìm thấy nguồn để trả lời tôi. Tôi nhớ đọc nó ở đâu đó khi tôi cố gắng làm theo ví dụ C2DM khi nó xuất hiện lần đầu vào năm ngoái trong Google I/O ... – Yenchi