2010-02-04 88 views
7

我的Android應用程序使用Java OAuth庫,在Twitter上找到here進行授權。我能夠獲得請求令牌,授權令牌並獲得確認,但是當瀏覽器嘗試回撥url以重新與我的應用程序連接時,它不會使用我在代碼中提供的URL,而是使用我在註冊時提供的URL與Twitter。Android上的OAuth + Twitter:回撥失敗

注:
1.當我的註冊與Twitter的應用程序,我提供一個假想的回調網址:http://abz.xyc.com和設置應用程序類型的瀏覽器。
2.我在我的代碼「myapp」中提供了一個回調網址,併爲我的活動添加了一個意向過濾器,將Browsable類別和數據方案添加爲「myapp」。
3.授權時調用的URL確實包含te代碼中指定的回調url。

任何想法我在做什麼錯在這裏?

相關代碼:

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

Twitter不遵守OAuth請求(Twitter API Announce)中請求的回調,並且只會重定向到應用程序設置中指定的回調URL(請注意,不允許使用「localhost」)。

我假設你檢查了Oauth-callback-on-android的問題。

的Android guesswork--
一點閱讀後,我看到的Android瀏覽器重定向MyApp的:///您的應用程序和我猜的Twitter不喜歡這個定製的URI前綴。我不是Android開發者,但我可能會提出的一個建議是在網上獲得「www.myapp.com」,並在那裏重新導向。

因此,有您的OAuth返回http://www.myapp.com/redirect.aspx?oauth_token=abc和有頁面重定向到myapp:///oauth_token=...(期望的結果)

+0

感謝您的回覆。 1.能否請你舉你的語句引用: 「推特不認可的OAuth請求,請求回調,只會重定向到應用程序設置指定的回調URL(注意,‘本地主機’是不允許的)。「 2.是的,我做了檢查OAuth的回調上Android的問題,並且已經設置我的應用程序類型(即瀏覽器),因此,再次 感謝。 – Samuh 2010-03-08 13:35:04

+0

添加鏈接的Twitter API公佈。 – 2010-03-08 13:47:34

+0

如果在回調要求的OAuth請求沒有兌現,那麼我怎麼稱呼我的應用程序後授權?Twitter不接受Android風格的URL,這些需要被覆蓋。如果上述不工作有什麼替代方法? 請幫助。 [你得到10現在點; 125回答完這個最後一個問題後:P] – Samuh 2010-03-09 09:52:52

0

它看起來像你對我在做正確的事和Twitter被永遠接受你註冊的回調URL搞砸了。有什麼方法可以更改註冊的網址嗎?也許你可以重新註冊並下次嘗試Android回調,看看會發生什麼。

+0

是的,我們可以通過點擊編輯應用程序設置按鈕來更改註冊的URL。我嘗試了兩種不同的URL,但沒有多少運氣,可能我會重新註冊並查看會發生什麼。 – Samuh 2010-02-05 03:17:36

+0

我沒有任何運氣重新註冊我的應用程序,但... – Samuh 2010-02-15 12:28:40

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

你會告訴我什麼是myapp這個應用程序的名稱和什麼來代替推文 – 2014-01-24 07:11:35

0

我的問題是,我試圖用我製作Twitter應用程序的相同帳戶登錄。在我用我的個人資料登錄後,回撥工作(到目前爲止)。