2011-11-29 11 views
6

का उपयोग कर ट्विटर के साथ लॉगिन मैं क्या प्रयास किया है:एंड्रॉयड: Twitter4J

मैं पहले से ही ट्विटर से कोई एप्लिकेशन पंजीकृत है और मिल गया उपभोक्ता कुंजी और Secret.Even मैं twitter.These के साथ प्रवेश करने विभिन्न कोड मिल गया है क्या कर रहे हैं मैं से कोशिश की है:

http://thetechnib.blogspot.com/2011/01/android-sign-in-with-twitter.html

[यह लिंक मर चुका है, तो आप एक संग्रह देख सकते हैं here]
http://www.android10.org/index.php/articleslibraries/291-twitter-integration-in-your-android-application

समस्या मेरे पास है:

अब तक, कोड ऊपर मुझे चहचहाना लॉगिन करने के लिए ले जाता है और मुझे प्रवेश करने और प्रवेश process.But मैं पता नहीं है कि यह कैसे उपयोग करने के लिए प्राप्त करने के लिए पूरा करने के लिए एक पिन डालते हैं मेरा ऐप काम कर रहा है। मैंने पूरे कोड की जांच की लेकिन पिन से संबंधित कुछ भी नहीं मिला।

दूसरे, जब मैं चहचहाना पर मेरे ऐप पंजीकृत है, यह कॉलबैक URL के लिए कहा, लेकिन के रूप में यह लिखा गया था कि इसकी वास्तव में जरूरत नहीं, मैं निर्दिष्ट करने को छोड़ दिया। (यहां तक ​​कि मैं यह क्या किया जाना चाहिए पता नहीं है!)

और इसलिए, मैं अपने ऐप में CallbackURL के रूप में शून्य दे रहा हूं।

किसी को भी मुझे बता सकते हैं, मैं कैसे प्रवेश प्रक्रिया को पूरा करने और उपयोगकर्ता वापस मेरे ऐप की मुख्य गतिविधि को पाने के लिए इस पिन का उपयोग कर सकते हैं? क्या यह कॉलबैक यूआरएल है जो समस्या पैदा कर रहा है या कुछ और मैं गलत कर रहा हूं?

कृपया reply.Any मदद appriciated! धन्यवाद।

संपादित करें:

फ्रेंकस्टीन ने सुझाव दिया है, मैं github.com/ddewaele/AndroidTwitterSample/downloads में कोड की कोशिश की

मैं कॉलबैक यूआरएल के साथ साथ मेरी उपभोक्ता कुंजी और उपभोक्ता सीक्रेट कहा:

public static final String OAUTH_CALLBACK_SCHEME= "x-oauthflow-twitter"; 
public static final String OAUTH_CALLBACK_HOST= "callback"; 
public static final String OAUTH_CALLBACK_URL= OAUTH_CALLBACK_SCHEME + "://" + OAUTH_CALLBACK_HOST; 

लेकिन यह मुझे इस त्रुटि देता है:

Logcat:

11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): Error during OAUth retrieve request token 
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): oauth.signpost.exception.OAuthNotAuthorizedException: Authorization failed (server replied with a 401). This can happen if the consumer key was not correct or the signatures did not match. 
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at oauth.signpost.AbstractOAuthProvider.handleUnexpectedResponse(AbstractOAuthProvider.java:239) 
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:189) 
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at oauth.signpost.AbstractOAuthProvider.retrieveRequestToken(AbstractOAuthProvider.java:69) 
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at com.ecs.android.sample.twitter.OAuthRequestTokenTask.doInBackground(OAuthRequestTokenTask.java:55) 
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at com.ecs.android.sample.twitter.OAuthRequestTokenTask.doInBackground(OAuthRequestTokenTask.java:1) 
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at android.os.AsyncTask$2.call(AsyncTask.java:185) 
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at java.lang.Thread.run(Thread.java:1096) 

मुझे ट्विटर की स्क्रीन पर साइन इन करने के बजाय, मुझे TWEET बटन पर क्लिक करने पर भी ब्लैक स्क्रीन दिखाती है।

OMG, मैं पागल बनने जा रही हूँ ... दो दिन के बाद से कोशिश कर रहे हैं! :(मदद कृपया

+0

क्या आप पहले ही प्राधिकरण प्रक्रिया से वापसी को संभालने और पहुंच टोकन संग्रहीत कर रहे हैं? – jmcdale

+0

अच्छा ... मुझे नहीं पता कि यह कोड में टोकन बचाता है या नहीं, क्योंकि मैं ओथ के लिए नया हूं। लेकिन कोड को देखते हुए, मुझे नहीं लगता कि टोकन बचाया गया है। – Hiral

उत्तर

9

ऐसा इसलिए है क्योंकि आपका ऐप डेस्कटॉप क्लाइंट के रूप में पंजीकृत है। कॉलबैक यूआरएल को ओवरराइट करने के लिए, आपके ऐप को ब्राउज़र क्लाइंट के रूप में पंजीकृत होना आवश्यक है।

https://dev.twitter.com/apps/[appid]/settings> कॉलबैक URL और अपने अनुप्रयोग पर एक डमी कॉलबैक URL (http://example.com/ या जो भी आप चाहते हैं) को विन्यस्त प्रयास करें ब्राउज़र क्लाइंट के रूप में पहचाना जाएगा।

फिर @ फ्रैंकेंस्टीन या @ jamn224 कोड आज़माएं।

+0

ने मेरे थकाऊ क्षणों को बचाया ... धन्यवाद –

5

आप अपनी गतिविधि

<activity android:name="com.apps.twitter.PrepareRequestTokenActivity" 
      android:launchMode="singleTask" android:theme="@android:style/Theme.Translucent.NoTitleBar" 
      android:screenOrientation="portrait"> 
      <intent-filter> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 
       <data android:scheme="x-oauthflow-twitter" android:host="callback" /> 
      </intent-filter> 
</activity> 

करने और निरंतर फ़ाइल में

final public static String CALLBACK_SCHEME = "x-oauthflow-twitter";  
final public static String CALLBACK_URL = CALLBACK_SCHEME + "://callback"; 
+0

मैंने अपने प्रश्न के दूसरे संदर्भ लिंक में निर्दिष्ट कोड के साथ यह कोशिश की है। लेकिन दुर्भाग्य से, यह मेरे लिए काम नहीं करता है। :(वैसे भी, धन्यवाद। – Hiral

+0

कॉलबैक के रूप में भी आपको "" ट्विटर के साथ साइन इन करने देता है, लेकिन मैं बस अटक गया हूं, मुझे नहीं पता कि पिन के साथ क्या करना है, मुझे साइन इन प्रक्रिया पूरी करने के लिए मिलता है। – Hiral

+0

धन्यवाद प्रतिक्रिया। मैं निश्चित रूप से कोशिश करूँगा और आपको बता दूंगा। – Hiral

7

पहले प्रकट में इस रूप में कॉलबैक लेखन किया जाना चाहिए, आप ठीक ढंग से प्रमाणित करने के लिए की जरूरत है:।

try{ 
     consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); 
     provider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token", "http://twitter.com/oauth/access_token", "http://twitter.com/oauth/authorize"); 
     String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL); 

     startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl))); 

    }catch(Exception e){ 
     Log.e(TAG,e+""); 
    } 

CALLBACK_URL के लिए आवश्यकताओं मालसूची फ़ाइल में सेट किया जा करने की जरूरत है (Frankenste को देखें जवाब में)।उपर्युक्त कोड ट्विटर के सर्वर पर प्राधिकरण करने का इरादा शुरू करता है। कॉलबैक जानकारी आवश्यक है इसलिए इरादा जानता है कि प्राधिकरण प्रक्रिया के बाद कौन सा ऐप वापस आना है।

फिर हम ट्विटर पर के सत्यापन के बाद एप्लिकेशन के लिए वापसी को संभालने की जरूरत है:

@Override 
public void onResume(){ 
    super.onResume(); 

    if (this.getIntent()!=null && this.getIntent().getData()!=null){ 
     Uri uri = this.getIntent().getData(); 

     //handle returning from authenticating the user 
     if (uri != null && uri.toString().startsWith(CALLBACK_URL)) { 
      String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER); 
      String token = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_TOKEN); 
      try { 
       Twitter t = new TwitterFactory().getInstance(); 
       t.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); 

       // Get Access Token and store it 
       rToken = new RequestToken(token, CONSUMER_SECRET); 
       AccessToken aToken = t.getOAuthAccessToken(rToken); 
       storeAccessToken(aToken); 

       //send to checkLoginState again since we have authorization now! 
       checkLoginState(); 

      } catch (Exception e) { 
       Log.e(TAG, e+""); 
      } 
      } 
     } 
}//end onResume 

इस कोड लौटा इरादे से डेटा पकड़ लेता है जो बीच में जानकारी प्रमाणीकरण टोकन हड़पने के लिए है। "storeAccessToken (aToken)" एक छोटी सी विधि है जिसे मैंने लिखा है जो ऐप की वरीयताओं में टोकन स्टोर करता है ताकि ऐप खोले जाने पर हमें हर बार पुनः प्राधिकृत करने की आवश्यकता न हो।

अब जब हम एक प्राधिकरण टोकन होना, हम इसे एक ट्विटर उदाहरण के लिए प्राधिकृत का उपयोग कर सकते हैं:

twitter = new TwitterFactory().getInstance(); 
     twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); 
     twitter.setOAuthAccessToken(aToken); 

ऊपर चर "ट्विटर" अब के लिए अधिकृत है और इसकी बात कर सकते हैं।

+0

उत्तर के लिए धन्यवाद। मैं इसे देखूंगा। – Hiral

+0

ओह ... उल्लेख करने की एक महत्वपूर्ण बात यह है कि मैं ओथ स्रोत प्रक्रियाओं के साथ सहायता के लिए ओपन सोर्स साइनपोस्ट पुस्तकालयों का उपयोग कर रहा हूं। मैं कॉमन्स लाइब्रेरी और कोर लाइब्रेरी का उपयोग करता हूं, जिनमें से दोनों पाए जा सकते हैं [http://code.google.com/p/oauth-signpost/downloads/list) – jmcdale

+0

क्या आप कृपया मुझे बता सकते हैं कि कैसे स्टोर करें टोकन? मेरा मतलब है, क्या आप मुझे विधियों के स्टोर को एक्सेस कर सकते हैं AccessToken (aToken) और checkLoginState() के साथ-साथ – Hiral