पिछले 5 दिनों से मैं ओएथ का उपयोग करके एंड्रॉइड में ट्विटर के लिए कोड का सबसे अच्छा काम करने वाला पासा खोज रहा हूं ... मुझे बहुत कुछ मिला। लेकिन एक भी 1 पूरी तरह से चल रहा है। कोई भी मुझे कुछ कोड कैसे मिलता है। यह काम कर रहा है लेकिन मुझे एक समस्या है। मुझे आश्चर्य है कि मुझे स्ट्रिंग कॉलबैक = "?" में क्या लिखना है ताकि मेरा एंड्रॉइड ब्राउज़र मुझे प्रमाणीकरण के बाद वहां रहने के बजाए मेरे आवेदन पर वापस भेज देगा .. अगर मैं कॉलबैक का उपयोग नहीं कर रहा हूं और OAuth.OUT_OF_BAND का उपयोग करता हूं तो ब्राउज़र एक पिन कोड दिखाता है और खुराक ब्राउज़र को मेरे एप्लिकेशन पर वापस रीडायरेक्ट नहीं करता है। कृपया मुझे यह बताने में सहायता करें कि मैं क्या गलत कर रहा हूं।ट्विटर के लिए OAuth का उपयोग करके मैं एंड्रॉइड में वापस कैसे कॉल कर सकता हूं?
यहाँ मेरी कोड चला जाता है
package com.example.tweeter;
import oauth.signpost.OAuth;
import oauth.signpost.OAuthProvider;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthProvider;
import oauth.signpost.exception.OAuthCommunicationException;
import oauth.signpost.exception.OAuthExpectationFailedException;
import oauth.signpost.exception.OAuthMessageSignerException;
import oauth.signpost.exception.OAuthNotAuthorizedException;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
public class Tweeter extends Activity {
private String CONSUMER_KEY = "CONSUMER_KEY";
private String CONSUMER_SECRET = "CONSUMER_SECRET";
private static final Uri CALLBACK_URI = Uri.parse("PicPuzzle://tkxel");
private String CALLBACK_URL = "PicPuzzle://tkxel";
OAuthProvider provider ;
CommonsHttpOAuthConsumer consumer ;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
consumer = new CommonsHttpOAuthConsumer(
CONSUMER_KEY, CONSUMER_SECRET);
provider = new CommonsHttpOAuthProvider(
"http://twitter.com/oauth/request_token",
"http://twitter.com/oauth/access_token",
"http://twitter.com/oauth/authorize");
provider.setOAuth10a(true);
HttpClient client = new DefaultHttpClient();
String authUrl = "http://www.yahoo.com";
try {
//This line work perfect but it not redirect me to my application
authUrl = provider.retrieveRequestToken(consumer, OAuth.OUT_OF_BAND);
//I want to send a calll back but It give exception
///*** authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URI.toString());
} catch (OAuthMessageSignerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthNotAuthorizedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthExpectationFailedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthCommunicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
}
@Override
protected void onResume() {
// this must be places in activity#onResume()
Uri uri = this.getIntent().getData();
if (uri != null && uri.toString().startsWith(CALLBACK_URL)) {
String verifier = uri.getQueryParameter("oauth_verifier");
// this will populate token and token_secret in consumer
try {
provider.retrieveAccessToken(consumer, verifier);
} catch (OAuthMessageSignerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthNotAuthorizedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthExpectationFailedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthCommunicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
super.onResume();
}
}
और मेरे AndroidManifest.xml नज़र इस
<uses-permission
android:name="android.permission.INTERNET"/>
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
>
<activity
android:name=".Tweeter"
android:label="@string/app_name"
>
<intent-filter>
<action
android:name="android.intent.action.MAIN"/>
<category
android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<intent-filter>
<action
android:name="android.intent.action.VIEW"
></action>
<category
android:name="android.intent.category.DEFAULT"
></category>
<category
android:name="android.intent.category.BROWSABLE"
></category>
<data
android:scheme="PicPuzzle"
android:host="tkxel"
></data>
</intent-filter>
</application>
<uses-sdk
android:minSdkVersion="7"/>`enter code here`
मैं इसे आजमाता हूं लेकिन अभी भी कोई समाधान नहीं है ...! यह हमेशा त्रुटि दिखाता है oauth.signpost.exception.OAuthNotAuthorizedException: प्रमाणीकरण विफल रहा (सर्वर ने 401 के साथ उत्तर दिया)। यह तब हो सकता है जब उपभोक्ता कुंजी सही नहीं थी या हस्ताक्षर मेल नहीं खाते थे। 01-10 16: 53: 20.614: WARN/System.err (5447): oauth.signpost.AbstractOAuthProvider.handleUnexpectedResponse (AbstractOAuthProvider.java3939) 01-10 16: 53: 20.614: WARN/System.err (5447): oauth.signpost.AbstractOAuthProvider.retrieve टोकन (AbstractOAuthProvider.java:189) – Arslan
मैंने आपके कोड पर नजदीकी नजर डाली है। मैं कुछ संभावित मुद्दों को देख सकता हूं: - संदेश हस्ताक्षरकर्ता: "consumer.setMessageSigner (नया HmacSha1MessageSigner()) के साथ सेट करें;" - एक्सेस टोकन पुनर्प्राप्त करना। सत्यापनकर्ता के लिए "OAuth.OAUTH_VERIFIER" का उपयोग करें (हालांकि यह शायद वही बात है। – ShibbyUK
विचार के लिए धन्यवाद .... लेकिन यह कोड कहां रखना है? संदेश हस्ताक्षरकर्ता: "उपभोक्ता.सेट मैसेज सिग्नेर (नया HmacSha1 संदेश संदेश) (") के साथ सेट करें; " – Arslan