Tôi đang phát triển một ứng dụng Android. Với việc không còn sử dụng quyền truy cập offline_access của Facebook, tôi đang cố sử dụng Graph API để mở rộng mã thông báo Facebook.Mã để nhận mã thông báo Facebook được làm mới trong ứng dụng Android là gì?
https://graph.facebook.com/oauth/access_token?
client_id=APP_ID&
client_secret=APP_SECRET&
grant_type=fb_exchange_token&
fb_exchange_token=EXISTING_ACCESS_TOKEN
Có thể cung cấp mã chi tiết thể hiện cách triển khai mã ở trên vào ứng dụng Android và nhận mã thông báo Facebook được làm mới không?
Cảm ơn bạn đã dành thời gian.
Cập nhật thứ hai:
Progress (tôi nghĩ)!
Sử dụng URL đầy đủ với phương pháp kết quả facebook yêu cầu trong URL cơ sở được thêm vào đầu của URL Vì vậy, thay vì
String refreshUrl = "https://graph.facebook.com/oauth/access_token?client_id=12345678910&client_secret=abcdefghijklmnopqrstuvwxyz&grant_type=fb_exchange_token&fb_exchange_token="+currentAccessToken;
nên sử dụng
String refreshUrl = "oauth/access_token?client_id=12345678910&client_secret=abcdefghijklmnopqrstuvwxyz&grant_type=fb_exchange_token&fb_exchange_token="+currentAccessToken;
Tuy nhiên tôi bây giờ nhận được phản hồi {"lỗi": {"nội dung": "Lỗi xác thực ứng dụng. ID ứng dụng không hợp lệ", "type": "OAuthException", "code": 190}}
Cập nhật một:
Đây là những gì tôi đã thử. Mã hoàn thành, đó là OnComplete trên listerner được gọi, NHƯNG phản hồi không chứa một mã thông báo truy cập mới hoặc giá trị hết hạn.
void refreshWithGraph() {
AsyncFacebookRunner extendingAsyncRunner = new AsyncFacebookRunner(facebook);
Bundle parameters = new Bundle();
//the variable currentAccessToken is obtained after authorisation is complete using currentAccessToken = facebook.getAccessToken();
String refreshUrl = "https://graph.facebook.com/oauth/access_token?client_id=12345678910&client_secret=abcdefghijklmnopqrstuvwxyz&grant_type=fb_exchange_token&fb_exchange_token="+currentAccessToken;
extendingAsyncRunner.request(refreshUrl, parameters, new RefreshListener(), null);
}
Đây là phiên bản của tôi về RefreshListener ...
//REFRESH LISTENER
public class RefreshListener extends BaseRequestListener {
public void onComplete(final String response, Object state) {
try {
final JSONObject json = Util.parseJson(response);
runOnUiThread(new Runnable() {
@Override
public void run() {
tvRefreshResponse.setText("IN REFRESH LISTENER ONCOMPLETE\nResponse is " + response);
tvRefreshToken.setText("IN REFRESH LISTENER ONCOMPLETE\nToken is " + facebook.getAccessToken());
tvRefreshExpiry.setText("IN REFRESH LISTENER ONCOMPLETE\nFacebook expiry is " + millisecToDate(facebook.getAccessExpires()));
}
}); //end runOnUiThread
} catch (JSONException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tvRefreshResponse.setText("IN REFRESH LISTENER ONCOMPLETE CAUGHT JSON EXCEPTION \nResponse is " + response);
}
}); //end runOnUiThread
} catch (FacebookError fe) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tvRefreshResponse.setText("IN REFRESH LISTENER ONCOMPLETE CAUGHT FACEBOOK ERROR \nResponse is " + response);
}
}); //end runOnUiThread
} //end catch Facebook error
} //end onComplete
@Override
public void onIOException(IOException e, Object state) {
tvRefreshResponse.setText("IN REFRESH LISTENER IOEXCEPTION \nException is "+ e.getLocalizedMessage());
}
@Override
public void onFileNotFoundException(FileNotFoundException e, Object state) {
tvRefreshResponse.setText("IN REFRESH LISTENER FILE NOT FOUND EXCEPTION \nException is "+ e.getLocalizedMessage());
}
@Override
public void onMalformedURLException(MalformedURLException e, Object state) {
tvRefreshResponse.setText("IN REFRESH MALFORMED URL \nException is "+ e.getLocalizedMessage());
}
@Override
public void onFacebookError(FacebookError e, Object state) {
tvRefreshResponse.setText("IN REFRESH ONFACEBOOK ERROR \nException is "+ e.getLocalizedMessage());
}
} //end RefreshListener
Mã này hoàn tất, đó là onComplete trên listerner được gọi, NHƯNG phản ứng không chứa một truy cập mới giá trị thẻ hoặc hết hạn. Câu trả lời là ...
{"id":"https:\/\/graph.facebook.com\/oauth\/access_token","shares":78,"comments":1}
Khi tôi đặt cùng một URL (với giá trị mã thông báo hiện tại chữ và số) vào trình duyệt web, câu trả lời CÓ bao gồm mã thông báo truy cập.
liên quan Thông tin
phép offline_access Facebook sẽ bị phản đối trên 01 tháng 5 năm 2012
Xin đừng đề nghị sử dụng các chức năng extendAccessTokenIfNeeded trong onResume() để thay thế.I am also having trouble với điều đó và đó là lý do tại sao tôi đang tìm kiếm vào Graph API :-) làm mới thẻ
liên quan Stack Overflow câu hỏi
Is it possible to extend Facebook tokens with extendAccessTokenIfNeeded in an Android app? (câu hỏi của tôi)
How would offline_access work after deprecation after May 1st?
Facebook access token can not be extended
Protecting app secret for extendAccessToken usage (Java/Android)
liên quan Facebook liên kết
Facebook offline_access permission deprecation
Với tất cả các liên kết ở trên, tại sao bạn cần thêm thông tin chi tiết? Có vẻ như bạn có đủ tài liệu để thực hiện điều này .. – Shreeni
Bạn nghĩ tôi có thể làm việc đó, nhưng không. :-(Tất cả các câu hỏi dễ dàng trên Stack Overflow nhận được trả lời đầy đủ rất nhanh chóng vì vậy tôi đoán điều này là không dễ dàng như nó có vẻ đầu tiên ... – Mel