Twitter登录Android应用程序

时间:2012-08-23 12:44:02

标签: android login oauth twitter-oauth

任何人都能告诉我从我的Android应用程序执行Open Auth for twitter登录的正确步骤吗?还有一件事是可以从我的APP上执行Twitter帐户的登录验证,而不需要gng到Twitter登录页面吗?

Idea是使用Twitter帐户登录我的Android APP(身份验证)吗?

我试过了,但是在没有在我的应用程序中输入用户名和密码的情况下,可以通过Twitter webview进行身份验证吗?

所以请帮助我!提前谢谢!!

3 个答案:

答案 0 :(得分:0)

您必须使用Twitter OAuth进行应用身份验证。
  twitter OAuth的示例描述为here

答案 1 :(得分:0)

它帮助我在Android应用程序中进行Twitter集成。

这是Android的官方Twitter工具包(Twitter SDK)

点击此链接https://dev.twitter.com/twitterkit/android/installation

dependencies {
// Include all the Twitter APIs
compile 'com.twitter.sdk.android:twitter:3.0.0'
// (Optional) Monetize using mopub
compile 'com.twitter.sdk.android:twitter-mopub:3.0.0'
}

repositories {
  jcenter()
 }

public class CustomApplication {
  public void onCreate() {
   TwitterConfig config = new TwitterConfig.Builder(this)
       .logger(new DefaultLogger(Log.DEBUG))
       .twitterAuthConfig(new TwitterAuthConfig("CONSUMER_KEY",   "CONSUMER_SECRET"))
    .debug(true)
 .build();
Twitter.initialize(config);
}
}

在布局中,添加一个带有以下代码的“登录”按钮:

<com.twitter.sdk.android.core.identity.TwitterLoginButton
 android:id="@+id/login_button"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />

在活动中

loginButton = (TwitterLoginButton) findViewById(R.id.login_button);
loginButton.setCallback(new Callback<TwitterSession>() {
 @Override
 public void success(Result<TwitterSession> result) {
    // Do something with result, which provides a TwitterSession for making API calls
 }

 @Override
 public void failure(TwitterException exception) {
     // Do something on failure
  }
 });

@Override
protected void onActivityResult(int requestCode, int resultCode,   Intent data) {
  super.onActivityResult(requestCode, resultCode, data);

  // Pass the activity result to the login button.
  loginButton.onActivityResult(requestCode, resultCode, data);
}

答案 2 :(得分:0)

应用设置

Create App here https://developer.twitter.com/en/apps/create

Add Callback URLs to twittersdk:// (For Android SDK)

From App Details goto Keys and tokens and add in res/values/strings.xml

<string name="twitter_api_key">REPLACE_KEY</string>
<string name="twitter_api_secret">REPLACE_SECRET</string>

From App Details goto Permissions -> Edit

Access permission -> Read, write, and Direct Messages
Additional permissions -> Check to true (Request email address from users)
Save

在AndroidManifest.xml中添加INTERNET权限

<uses-permission android:name="android.permission.INTERNET" />

将twitter SDK依赖项添加到build.gradle(Module:app)

dependencies {
    implementation 'com.twitter.sdk.android:twitter:3.1.1'
    //implementation 'com.twitter.sdk.android:twitter-core:3.1.1'
    //implementation 'com.twitter.sdk.android:tweet-ui:3.1.1'
}

活动中

private TwitterAuthClient twitterAuthClient;

Custom Button Click

TwitterConfig config = new TwitterConfig.Builder(this)
    .logger(new DefaultLogger(Log.DEBUG))
    .twitterAuthConfig(new TwitterAuthConfig(getResources().getString(R.string.twitter_api_key), getResources().getString(R.string.twitter_api_secret)))
    .debug(true)
    .build();
Twitter.initialize(config);

twitterAuthClient = new TwitterAuthClient();

TwitterSession twitterSession = TwitterCore.getInstance().getSessionManager().getActiveSession();

if (twitterSession == null) {
    twitterAuthClient.authorize(this, new Callback<TwitterSession>() {
        @Override
        public void success(Result<TwitterSession> result) {
            TwitterSession twitterSession = result.data;
            getTwitterData(twitterSession);
        }

        @Override
        public void failure(TwitterException e) {
            Log.e("Twitter", "Failed to authenticate user " + e.getMessage());
        }
    });
} else {
    getTwitterData(twitterSession);
}

private void getTwitterData(final TwitterSession twitterSession) {
    TwitterApiClient twitterApiClient = new TwitterApiClient(twitterSession);
    final Call<User> getUserCall = twitterApiClient.getAccountService().verifyCredentials(true, false, true);
    getUserCall.enqueue(new Callback<User>() {
        @Override
        public void success(Result<User> result) {

            String socialId = "", firstName = "", lastName = "", gender = "", birthday = "", email = "", picture = "";

            User user = result.data;
            socialId = user.idStr;
            email = user.email;
            /*picture = user.profileImageUrlHttps.replace("_normal", "");
            firstName = user.name;
            lastName = user.screenName;*/

            try {
                firstName = user.name.split(" ")[0];
                lastName = user.name.split(" ")[1];
            } catch (Exception e) {
                firstName = user.name;
                lastName = "";
            }

            Log.e("Twitter", "SocialId: " + socialId + "\tFirstName: " + firstName + "\tLastName: " + lastName + "\tEmail: " + email);
        }

        @Override
        public void failure(TwitterException exception) {
            Log.e("Twitter", "Failed to get user data " + exception.getMessage());
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (twitterAuthClient != null) {
        twitterAuthClient.onActivityResult(requestCode, resultCode, data);
    }
}