Android twitter回调网址错误

时间:2014-08-14 06:18:53

标签: android twitter callback twitter4j

好的,所以我正在创建一个推特克隆,我现在唯一的问题是回调网址让我回到应用程序,但却给了我一个找不到错误的页面。

我在stackoverflow中看到了一些类似的问题,并按照步骤进行操作。

  1. 我使用以下代码获取身份验证URL:

    public String beginAuthorization(){
     try{
        if(null==currentRequestToken){
            currentRequestToken = twitter.getOAuthRequestToken(TWITTER_CALLBACK_URL);
        }
        return currentRequestToken.getAuthenticationURL();
    
    }catch (TwitterException te){
        te.printStackTrace();
    }
    return null; }
    
  2. 接下来,我正在使用以下代码检索访问令牌:

    public void setAccessToken(Uri uri) {
    
    if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK_URL)) {
        String verifier = uri.getQueryParameter("oauth_token");
        try {
            AccessToken accessToken = twitter.getOAuthAccessToken(app.currentRequestToken, verifier);
            //shared prefs
            SharedPreferences.Editor e = yambaSharedPrefs.edit();
            e.putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken());
            e.putString(PREF_KEY_OAUTH_SECRET, accessToken.getTokenSecret());
    
            //store log in status
            e.putBoolean(PrefSharedTwitterLoggedIn, true);
            e.apply();
            Intent intent = new Intent(this, StatusActivity.class);
            startActivity(intent);
    
        } catch (TwitterException e) {
            e.printStackTrace();
        }
    }   }
    
  3. 我的回调网址如下所示:

    public static final String  OAUTH_CALLBACK_SCHEME = "twitter4j-MiYAMBA";public static final String  OAUTH_CALLBACK_HOST  = "callback";public static final String  TWITTER_CALLBACK_URL = OAUTH_CALLBACK_SCHEME + "://" + OAUTH_CALLBACK_HOST;
    
  4. 我还在意图过滤器中添加了回调网址,例如:

      

    数据android:host ="回调"机器人:方案=" twitter4j-MiYAMBA"

  5. 现在我不确定问题出在哪里。

    此外,控件如何流出应用程序:

    运行应用程序时会启动StatusActivity,它会使用在名为YAMBAapp的Android应用程序类中定义的函数isAuthorised()检查是否设置了AccessToken,如果已定义,则开始设置布局,正在使按钮和东西可见,否则它将控件传递给函数beginAuthorization(),它启动一个名为AuthorizationActivity的Activity,它获取Authentication URL并将其传递给WebView,所有这一切都在函数onResume中完成,在此函数中我调用另一个函数setAccessToken并传递' uri'有数据使用:

    uri = getIntent().getData();
    setAccessToken(uri);
    

    我已粘贴上面的setAccessToken代码。 同样在清单中我已经定义了"数据" " AuthorizationActivity"的意图过滤器中的项目而不是" StatusActivity",尽管它没有任何影响。

    请帮助,我真的被困了几天了:)

1 个答案:

答案 0 :(得分:0)

首先,当您使用默认Web浏览器启动Twitter身份验证时,一旦收到访问令牌并因此找不到页面,您将永远不会返回主应用程序,因为URL无效。

您需要的是通过您自己的应用程序使用Web视图加载身份验证,现在您可以在重定向时覆盖这里的一些功能。在这里,您需要进行最终处理并终止Web视图,这将导致控制权返回到您自己的应用程序,而不是在浏览器中找不到页面。

示例:以下是您如何设置webview机制,现在您创建了一个主题,如对话框或其他任何内容,并使用twitter auth url加载此webview,一旦用户authtenticate自己shouldOverrideUrlLoading将被调用,在这里你回溯验证者并退出..

webView.setWebViewClient( new WebViewClient()
{
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {
        // your url pattern here
        if( url.contains("callback://twitter4j-MiYAMBA"))
        {

            Uri uri = Uri.parse( url );
            // you get the verifier here
            String oauthVerifier = uri.getQueryParameter( "oauth_verifier" );

            // Do whateever u want here
            ..oauthVerifier.

            //
            // Finish this task, so you return back to activity from where it started
            finish();
            return true;
        }
        return false;
    }
});

我想这足以完成其余的实施。更多信息在这里'

http://daiwei.lu/2014/01/22/twitter-oauth-flow-on-android/