2013-02-11 318 views
3

我有一個以前的Android應用程序的代碼,我已經成功與Twitter整合。我已將此代碼複製到一個新應用程序中,併爲我的新應用程序更改callback-url,consumer-keyconsumer-secretAndroid Twitter集成 - 卡在登錄頁面?

使用twitter4j庫,我能得到我的RequestToken和驗證網址如下:

Twitter twitter = new TwitterFactory().getInstance(); 
twitter.setOAuthConsumer(myConsumerKey, myConsumerSecret); 
RequestToken requestToken = twitter.getOAuthRequestToken(myCallbackUrl); 
String authenticationUrl = requestToken.getAuthenticationURL() 

RequestToken有一個非空token值,非空tokenSecret值,空secretKeySpec值。認證URL是以下形式:

http://api.twitter.com/oauth/authenticate?oauth_token=... 

我在WebView加載這個網址,我看到以下頁面:

Sign in page

這裏我卡住了。當我點擊Sign In按鈕時,只是同一頁面不斷加載。沒有其他的。當我點擊Cancel按鈕但是,我看到如下頁面:僅此頁上

enter image description here

當我點擊Return to Fan League Beko BBL按鈕是我callback-url調用,與有我oauth_token它的價值denied參數。任何人之前看過類似的東西,並知道什麼可能會阻止我的登錄請求被處理?

更新1:我已經試過了驗證網址和從桌面瀏覽器的Sign In按鈕,它按預期工作,處理響應,然後調用回調URL。在我的Android應用程序的WebView中嘗試時,它只是失敗。我已經在多款Android設備和平板電腦上試用過。我的WebView上也啓用了JavaScript,所以不是這樣。想法最受歡迎。我沒有想法!

更新2:我只是做了一些調試模式代碼跟蹤我WebViewWebViewClient,我看到,當我點擊Sign In按鈕時,shouldOverrideUrlLoading(WebView webView, String url)方法不叫,但以下有三種方法稱爲(按順序):onPageStarted(WebView view, String url, Bitmap favicon)onLoadResource(WebView view, String url),onPageFinished(WebView view, String url)。這些方法具有的url值是:https://api.twitter.com/oauth/authenticate,即oauth_token參數已被剝離驗證URL。也許這是一個POST請求被視爲GET請求,因此這一個相同的頁面不斷加載?任何想法我可以做些什麼,這Sign In按鈕按下處理正確?

+0

希望這會幫助你http://stackoverflow.com/questions/1782743/twitter-integration-on-android-app/12417449#12417449 – Cjames 2013-02-14 03:59:11

回答

1

奇怪的是,我的Twitter集成已經開始工作。我沒有更改我的應用程序代碼或我的應用程序的Twitter設置。我注意到,Twitter認證頁面之前有一個藍色的Sign In按鈕,它現在有一個藍色的Authenticate app按鈕。所以我猜猜Twitter的結局改變了/固定了一些東西。

2

我猜你忘了從twitter應用程序控制面板設置回調網址。

登錄到twitter api部分,選擇您的應用程序並轉到設置選項卡。

enter image description here

如果不這樣做,當用戶按下登錄沒有重定向會發生這樣的話你將無法趕上驗證。

另一方面,當您設置回調網址時,您的webview可以攔截重定向。

注意:您可以設置任何您想要的url,重要的是捕獲傳遞給重定向url的oauth_verifier參數。

在這種情況下,你的

shouldOverrideUrlLoading 

應該被觸發。

+0

我仔細檢查,肯定有一個回調URL指定。當我點擊'取消'和'返回粉絲聯盟Beko BBL'按鈕時,回調URL被調用(帶有'denied'參數)。 – 2013-02-23 16:09:02

1

從WebViewClient中覆蓋onLoadResource(WebView view, String url)並在授權活動中使用此代碼,其中您在onCreate()中的onResume()和webView.setWebViewClient(webViewClient)中使用webView.loadUrl(authenticationUrl)

private WebViewClient webViewClient = new WebViewClient() { 
    @Override 
    public void onLoadResource(WebView view, String url) { 
     // the URL we're looking for looks like this: 
     // callbackurl?oauth_token=1234567890qwertyuiop 
     Uri uri = Uri.parse(url); 
     if (uri.getHost().equals("callbackurlhost")) { 
      String token = uri.getQueryParameter("oauth_token"); 
      if (null != token) { 
       webView.setVisibility(View.INVISIBLE); 
       AccessToken accessToken = twitter.getOAuthAccessToken(); 
       // TODO store access token 
       finish(); 
      } else { 
       // TODO tell user to try again 
      } 
     } else { 
      super.onLoadResource(view, url); 
     } 
    } 
}; 
+0

當我點擊'Sign In'按鈕時,傳入'onLoadResource(WebView視圖,String url)'方法的'url'值是'https:// api.twitter.com/oauth/authenticate'(沒有' oauth_token'參數),而不是我的回調URL。 – 2013-02-23 16:58:33

+0

實際上,您的回調URL將在登錄後被調用,並被重定向,並在onLoadResource()中發生此事件時會通知您。還要確保在Twitter網站上註冊新應用程序時,應用程序類型是瀏覽器而不是客戶端。 – 2013-02-23 21:31:40

0

你把這個回調url嗎?

public static final String CALLBACK_URL =「twitterapp:// connect」;

檢查你的授權方法:

mHttpOauthConsumer = new CommonsHttpOAuthConsumer(mConsumerKey, mSecretKey); 
mHttpOauthprovider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token", 
                "http://twitter.com/oauth/access_token", 
                "http://twitter.com/oauth/authorize"); 

public void authorize() 
{ 
     mProgressDlg.setMessage("Initializing ..."); 
     mProgressDlg.show(); 

     new Thread() { 
      @Override 
      public void run() { 
       String authUrl = ""; 
       int what = 1; 

       try { 
        authUrl = mHttpOauthprovider.retrieveRequestToken(mHttpOauthConsumer, CALLBACK_URL);  

        what = 0; 

        Log.d(TAG, "Request token url " + authUrl); 
       } catch (Exception e) { 
        Log.d(TAG, "Failed to get request token"); 

        e.printStackTrace(); 
       } 

       mHandler.sendMessage(mHandler.obtainMessage(what, 1, 0, authUrl)); 
      } 
     }.start(); 
    } 

化妝調用twitter.authorize(); 希望這可以幫助

+0

我已經指定了一個回調URL。這不是問題。 – 2013-02-23 16:15:10

1

我最近在我的應用程序的推特上已經整合了共享。它的工作完美。

我已經使用最新twitter4j核-3.0.3.jar

我創建了一個簡單的演示應用程序,可以從以下鏈接下載並去thorugh它。 http://santhoshkumaar.blogspot.in/2013/02/posting-message-on-twitter.html https://github.com/santhoshkumaar/ShareOnTwitter/

這可能對您有所幫助。

+0

什麼是'twitter4j-media-support-3.0.3'罐子? – 2013-02-23 16:20:08

+0

twitter4j-media-support-3.0.3用於上傳圖片等多媒體支持的jar。您可以忽略它。 – Santhosh 2013-02-25 08:28:52

+0

thanqqqqq sooooo muchhhhhhh – Ramz 2013-06-21 05:15:03