【问题标题】:twitter4j OAuth Androidtwitter4j OAuth Android
【发布时间】:2013-12-17 16:26:21
【问题描述】:

处理这种新型身份验证的传统方式是 twitter 实现的。我不认为我做对了,现在我有这个活动:

因此,用户为了验证应用程序,他们必须获得一个 pin,他们必须通过单击 get Pin 按钮来获得该 pin。

有这个代码:

@
Override
protected String doInBackground(Void...params) {

    String s = null;

    twitter = TwitterFactory.getSingleton();
    twitter.setOAuthConsumer("XXXX", "XXXXX");




    try {
        requestToken = twitter.getOAuthRequestToken();

        s = requestToken.getAuthorizationURL();

    } catch (TwitterException e) {



        e.printStackTrace();
    }




    return s;
}

@
Override
protected void onPostExecute(String url) {


    Intent intent = new Intent(AuthenticateActivity.this, Oauth_web_view.class);
    intent.putExtra("url", url);
    startActivity(intent);




}
}

这会将他们带到另一个活动,这只是一个 webview 并让他们获取他们的 pin,然后他们输入他们的 pin,他们必须提交 pin,然后他们按下提交 pin 按钮有这个代码。

 class AddUserCreds extends AsyncTask < Void, String, String > {

     @
     Override
     protected String doInBackground(Void...urls) {


         //String url = urls[0];




         String pin = txtPin.getText().toString();
         System.out.println(pin);

         //  try{
         //  if(pin.length() > 0){
         try {
             accessToken = twitter.getOAuthAccessToken(requestToken, pin);

             // Shared Preferences
             Editor e = mSharedPreferences.edit();

             // After getting access token, access token secret
             // store them in application preferences
             e.putString("PREF_KEY_OAUTH_TOKEN", accessToken.toString());
             //   Store login status - true
             e.putBoolean("PREF_KEY_TWITTER_LOGIN", true);
             e.commit(); // save changes

             Log.e("Twitter OAuth Token", "> " + accessToken.getToken());
         } catch (TwitterException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }




         // }
         //   } catch (TwitterException te) {
         //   if(401 == te.getStatusCode()){
         // //    System.out.println("Unable to get the access token.");
         //  }else{
         //     te.printStackTrace();
         //   }
         //  }
         return "done";


         // 




     }


     @
     Override
     protected void onPostExecute(String url) {




         AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(AuthenticateActivity.this);

         alertDialogBuilder.setMessage("You've been authenticated" + url);

         alertDialogBuilder.show();




     }

它工作过一次,它把我的 twitter 开发者帐户添加到我创建的一个假帐户中,但现在如果我再次运行它,它会中断,因为它已经过身份验证。有没有办法测试我是否已经通过身份验证?所以他们不必经历这个过程?是否有更简化的身份验证流程?

【问题讨论】:

    标签: android oauth twitter4j


    【解决方案1】:

    我要做的是首先从首选项中读取 auth toekn/secret(我在第一次身份验证期间保存,正如您已经做的那样),如果我看到它已保存,我会使用它而不是执行额外的身份验证试图。请参阅下面我的代码的 sn-p,希望对您有所帮助:

            String authToken = prefs.getString(PREF_TWITTER_ACCESS_TOKEN, null);
            String authTokenSecret = prefs.getString(PREF_TWITTER_ACCESS_TOKEN_SECRET, null);
            if (authToekn == null)
            {
                 //... perform auth
            }
            else //we're ready to go
            { 
              ConfigurationBuilder cb = new ConfigurationBuilder();
              cb.setDebugEnabled(true)
                .setOAuthConsumerKey(APIKEY)
                .setOAuthConsumerSecret(APISECRET)
                .setOAuthAccessToken(authToken)
                .setOAuthAccessTokenSecret(authTokenSecret);
              twitterConnection = new TwitterFactory(cb.build()).getInstance();
            }
    

    【讨论】:

      猜你喜欢
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      相关资源
      最近更新 更多