Tôi đang thiết lập OAuth cho ứng dụng Android của mình. Để kiểm tra nó, tôi đã làm như sau: Đã thêm signpost-core-1.2.1.1.jar và signpost-commonshttp4-1.2.1.1.jar vào dự án của tôi, thêm các biến "CommonsHttpOAuthConsumer consumer" và "CommonsHttpOAuthProvider provider" và thực hiện như sau nút được click:Android OAuth: Ngoại lệ trên retrieveAccessToken()
consumer = new CommonsHttpOAuthConsumer("xxx", "yyy");
provider = new CommonsHttpOAuthProvider("https://api.twitter.com/oauth/request_token",
"https://api.twitter.com/oauth/access_token",
"https://api.twitter.com/oauth/authorize");
oauthUrl = provider.retrieveRequestToken(consumer, "myapp://twitterOauth");
persistOAuthData();
this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(oauthUrl)));
persistOAuthData() nào sau đây:
protected void persistOAuthData()
{
try
{
FileOutputStream providerFOS = this.openFileOutput("provider.dat", MODE_PRIVATE);
ObjectOutputStream providerOOS = new ObjectOutputStream(providerFOS);
providerOOS.writeObject(this.provider);
providerOOS.close();
FileOutputStream consumerFOS = this.openFileOutput("consumer.dat", MODE_PRIVATE);
ObjectOutputStream consumerOOS = new ObjectOutputStream(consumerFOS);
consumerOOS.writeObject(this.consumer);
consumerOOS.close();
}
catch (Exception e) { }
}
Vì vậy, người tiêu dùng và nhà cung cấp sẽ được lưu trước khi mở trình duyệt, như được mô tả here.
Trong phương thức onResume() Tôi tải dữ liệu nhà cung cấp và người tiêu dùng và làm như sau:
Uri uri = this.getIntent().getData();
if (uri != null && uri.getScheme().equals("myapp") && uri.getHost().equals("twitterOauth"))
{
verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER);
if (!verifier.equals(""))
{
loadOauthData();
try
{
provider.retrieveAccessToken(consumer, verifier);
}
catch (OAuthMessageSignerException e) {
e.printStackTrace();
} catch (OAuthNotAuthorizedException e) {
e.printStackTrace();
} catch (OAuthExpectationFailedException e) {
e.printStackTrace();
} catch (OAuthCommunicationException e) {
e.printStackTrace();
}
}
}
Vì vậy, những gì hoạt động: 1) Tôi làm được một requestToken và requestSecret. 2) Tôi nhận được oauthUrl. 3) Tôi được chuyển đến trang trình duyệt để ủy quyền ứng dụng của tôi 4) Tôi đang được chuyển hướng đến ứng dụng của mình. 5) Tôi nhận được người xác minh. Nhưng gọi truy xuấtTruy cậpToken (người tiêu dùng, người xác minh) không thành công với một OAuthCommunicationException nói "Giao tiếp với nhà cung cấp dịch vụ không thành công: null".
Có ai biết điều gì có thể là lý do không? Một số người dường như có vấn đề với requestToken, nhưng điều đó chỉ hoạt động tốt. Tôi tự hỏi nếu nó có thể là một vấn đề mà ứng dụng của tôi cũng đã bao gồm apache-mime4j-0.6.jar và httpmime-4.0.1.jar mà tôi cần để tải lên nhiều phần.
thanks a lot ... này giải quyết vấn đề của tôi ... công việc tuyệt vời của Manuel – Panache
Vì vậy, trong trường hợp của bạn, 'requestToken' bạn đặt trong' consumer.setOkenWithSecret' là 'oauthUrl'? và tôi có thể hỏi 'tokenSecret' là gì? Cảm ơn :) – dumbfingers
Xin lỗi, tôi nghĩ rằng tôi có thể tìm ra nó, là 'requestToken' được lấy ra bằng cách sử dụng' consumer.getToken() '? – dumbfingers