2010-02-04 6 views
7

मेरा एंड्रॉइड एप्लिकेशन जावा ओथ लाइब्रेरी का उपयोग करता है, ट्विटर पर प्राधिकरण के लिए here मिला। मैं अनुरोध टोकन प्राप्त करने में सक्षम हूं, टोकन को अधिकृत करता हूं और एक स्वीकृति प्राप्त करता हूं लेकिन जब ब्राउज़र मेरे आवेदन के साथ पुनः कनेक्ट करने के लिए कॉल बैक यूआरएल की कोशिश करता है, तो यह कोड में प्रदान किए गए यूआरएल का उपयोग नहीं करता है, लेकिन पंजीकरण के दौरान प्रदान की गई एक का उपयोग करता है ट्विटर के साथओएथ + एंड्रॉइड पर ट्विटर: कॉलबैक

नोट:
1. ट्विटर के साथ अपना आवेदन पंजीकृत करते समय, मैंने एक hypothetical कॉल वापस url प्रदान किया: http://abz.xyc.com और एप्लिकेशन प्रकार ब्राउज़र के रूप में सेट करें।
2. मैंने अपने कोड "myapp" में एक कॉलबैक यूआरएल प्रदान किया है और ब्राउज़ करने योग्य श्रेणी और डेटा योजना के साथ "myapp" के रूप में अपनी गतिविधि के लिए एक इरादा फ़िल्टर जोड़ा है।
3. प्राधिकृत करने पर यूआरएल को कॉलबैक यूआरएल होता है, मैंने कोड में निर्दिष्ट किया है।

कोई विचार क्या मैं यहां गलत कर रहा हूं?

प्रासंगिक कोड:

public class FirstActivity extends Activity 
{ 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     OAuthAccessor client = defaultClient(); 
     Intent i = new Intent(Intent.ACTION_VIEW); 
     i.setData(Uri.parse(client.consumer.serviceProvider.userAuthorizationURL + "?oauth_token=" 
       + client.requestToken + "&oauth_callback=" + client.consumer.callbackURL)); 

     startActivity(i); 

    } 

    OAuthServiceProvider defaultProvider() 
    { 
     return new OAuthServiceProvider(GeneralRuntimeConstants.request_token_URL, 
       GeneralRuntimeConstants.authorize_url, GeneralRuntimeConstants.access_token_url); 
    } 

    OAuthAccessor defaultClient() 
    { 
     String callbackUrl = "myapp:///"; 
     OAuthServiceProvider provider = defaultProvider(); 
     OAuthConsumer consumer = new OAuthConsumer(callbackUrl, 
       GeneralRuntimeConstants.consumer_key, GeneralRuntimeConstants.consumer_secret, 
       provider); 
     OAuthAccessor accessor = new OAuthAccessor(consumer); 

     OAuthClient client = new OAuthClient(new HttpClient4()); 
     try 
     { 
      client.getRequestToken(accessor); 
     } catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

     return accessor; 
    } 

    @Override 
    protected void onResume() 
    { 
     // TODO Auto-generated method stub 
     super.onResume(); 

     Uri uri = this.getIntent().getData(); 
     if (uri != null) 
     { 
      String access_token = uri.getQueryParameter("oauth_token"); 
     } 
    } 

} 
// Manifest file 
<application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".FirstActivity" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <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="myapp"/> 
      </intent-filter> 
     </activity> 
</application> 

उत्तर

11

ट्विटर OAuth अनुरोध (Twitter API Announce) में अनुरोध किए गए कॉलबैक का सम्मान नहीं करता है और केवल एप्लिकेशन सेटिंग्स में निर्दिष्ट कॉलबैक यूआरएल पर रीडायरेक्ट करेगा (ध्यान दें कि "लोकलहोस्ट" की अनुमति नहीं है)।

मुझे लगता है कि आपने Oauth-callback-on-android प्रश्न की जांच की है।

एंड्रॉयड guesswork--
अप पढ़ने का एक सा के बाद, मैं एंड्रॉयड ब्राउज़र को MyApp देखें: /// अपने आवेदन करने के लिए और मैं ट्विटर अनुमान है कि इस bespoke यूआरआई उपसर्ग पसंद नहीं है। मैं कोई एंड्रॉइड डेवलपर नहीं हूं लेकिन एक सुझाव है कि मैं वेब पर "www.myapp.com" प्राप्त कर सकता हूं और वहां फिर से रीडायरेक्ट कर सकता हूं।

तो http://www.myapp.com/redirect.aspx?oauth_token=abc को अपनी OAuth मुनाफा होता है और उस पृष्ठ myapp:///oauth_token=... (वांछित परिणाम)

+0

आपके उत्तर के लिए धन्यवाद। 1. क्या आप कृपया अपने कथन के लिए संदर्भ उद्धृत कर सकते हैं: "ट्विटर OAuth अनुरोधों में अनुरोध किए गए कॉलबैक का सम्मान नहीं करता है और केवल एप्लिकेशन सेटिंग्स में निर्दिष्ट कॉलबैक यूआरएल पर रीडायरेक्ट करेगा (ध्यान दें कि" लोकलहोस्ट "की अनुमति नहीं है)।" 2. हाँ, मैं धन्यवाद फिर से Oauth-कॉलबैक-ऑन-एंड्रॉयड सवाल जाँच किया था और अपने आवेदन प्रकार (यानी ब्राउज़र) की स्थापना की है उसके अनुसार।। – Samuh

+0

जोड़ा गया ट्विटर एपीआई के लिए लिंक की घोषणा। –

+0

कॉलबैक OAuth में यह निवेदन किया अनुरोधों को सम्मानित नहीं किया जाता है, फिर मैं अपने आवेदन को वापस पोस्ट प्राधिकरण कहां कॉल करूं? ट्विटर एंड्रॉइड-स्टाइल यूआरएल स्वीकार नहीं करता है, इन्हें ओवरराइड करने की आवश्यकता है। उपर्युक्त काम करने पर विकल्प क्या हैं? कृपया मदद करें। [आपको 10 मिल रहे हैं इस पल में अंक; 125 इस अंतिम प्रश्न का उत्तर देने के बाद: पी] – Samuh

0

ऐसा लगता है कि आप सही बात कर रहे हैं और ट्विटर हमेशा अपने पंजीकृत कॉलबैक URL को स्वीकार कर पंगा लेना है मेरे लिए लग रहा है। क्या पंजीकृत यूआरएल बदलने का कोई तरीका है? हो सकता है कि आप अगली बार फिर से पंजीकरण कर सकते हैं और एंड्रॉइड कॉलबैक आज़मा सकते हैं, देखें कि क्या होता है।

+0

हां, हम संपादन आवेदन सेटिंग बटन पर क्लिक करके पंजीकृत यूआरएल बदल सकते हैं। मैंने बिना किसी भाग्य के यूआरएल के दो अलग-अलग सेटों की कोशिश की, शायद मैं फिर से पंजीकरण करूंगा और देख सकता हूं कि क्या होता है। – Samuh

+0

मैंने बिना किसी किस्मत के मेरे आवेदन को फिर से पंजीकृत किया है ... – Samuh

3

को अनुप्रेषित मेरे मामले में है, मैं इस काम के होते हैं:

String authURL = m_provider.retrieveRequestToken (m_consumer, CALLBACK_URL); 

और प्रकट में:

<activity android:configChanges = "keyboardHidden|orientation" android:name = "xxxx.android.xxxxx"> 
     <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="myapp" android:host="tweet" /> 
     </intent-filter> 

इस मामले में कॉलबैक यूआरएल होगा: MyApp: // ट्वीट

+0

क्या आप कृपया मुझे बताएं कि मैपैप क्या है यह एप्लिकेशन नाम है और ट्वीट के स्थान पर क्या लिखना है –

0

मेरी समस्या यह थी कि मैं उसी खाते से लॉग इन करने का प्रयास कर रहा था जिसे मैंने ट्विटर ऐप बनाया था। मेरे व्यक्तिगत प्रोफ़ाइल के साथ लॉग इन करने के बाद कॉल बैक काम करता है (अब तक)।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^