Android应用程序的Twitter登录

Android应用程序的Twitter登录,android,login,oauth,twitter-oauth,Android,Login,Oauth,Twitter Oauth,有谁能告诉我从我的Android应用程序执行Open Auth for twitter登录的正确步骤吗?还有一件事,在没有从我的应用程序转到twitter登录页面的情况下,是否可以执行twitter帐户的登录验证 Idea正在使用twitter帐户登录我的android应用程序(身份验证) 我已经尝试过了,但它是gng到twitter网络视图进行身份验证,而没有在我的应用程序中键入用户名和密码 所以请帮帮我!提前谢谢 您必须使用Twitter OAuth对您的应用进行身份验证。 TwitterO

有谁能告诉我从我的Android应用程序执行Open Auth for twitter登录的正确步骤吗?还有一件事,在没有从我的应用程序转到twitter登录页面的情况下,是否可以执行twitter帐户的登录验证

Idea正在使用twitter帐户登录我的android应用程序(身份验证)

我已经尝试过了,但它是gng到twitter网络视图进行身份验证,而没有在我的应用程序中键入用户名和密码


所以请帮帮我!提前谢谢

您必须使用
Twitter OAuth
对您的应用进行身份验证。

TwitterOAuth的例子被描述为

它帮助我在android应用程序中集成twitter

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

检查此链接

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

<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);
}
loginButton=(TwitterLoginButton)findViewById(R.id.login_按钮);
setCallback(newcallback()){
@凌驾
公开作废成功(结果){
//对result执行一些操作,它提供了一个用于进行API调用的TwitterSession
}
@凌驾
公共无效失败(TwitterException异常){
//失败时做点什么
}
});
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
//将活动结果传递给登录按钮。
onActivityResult(请求代码、结果代码、数据);
}

应用程序设置

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
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);
    }
}
私有TwitterAuthClient TwitterAuthClient;
自定义按钮单击
TwitterConfig=新建TwitterConfig.Builder(此)
.logger(新的DefaultLogger(Log.DEBUG))
.twitterAuthConfig(新twitterAuthConfig(getResources().getString(R.string.twitter\u api\u密钥),getResources().getString(R.string.twitter\u api\u密钥)))
.debug(true)
.build();
初始化(config);
twitterAuthClient=新建twitterAuthClient();
TwitterSession TwitterSession=TwitterCore.getInstance().getSessionManager().getActiveSession();
if(twitterSession==null){
twitterAuthClient.authorize(这是一个新的回调函数(){
@凌驾
公开作废成功(结果){
TwitterSession TwitterSession=result.data;
getTwitterData(推特会话);
}
@凌驾
公共无效失败(Twittere异常){
Log.e(“Twitter”,“无法验证用户”+e.getMessage());
}
});
}否则{
getTwitterData(推特会话);
}
私有void getTwitterData(最终TwitterSession TwitterSession){
TwitterApiClient TwitterApiClient=新TwitterApiClient(twitterSession);
最终调用getUserCall=twitterApiClient.getAccountService().verifyCredentials(真、假、真);
getUserCall.enqueue(新回调(){
@凌驾
公开作废成功(结果){
字符串socialId=“”,firstName=“”,lastName=“”,gender=“”,birth=“”,email=“”,picture=“”;
User=result.data;
socialId=user.idStr;
email=user.email;
/*picture=user.profileImageUrlHttps.replace(“_normal”,”);
firstName=user.name;
lastName=user.screenName*/
试一试{
firstName=user.name.split(“”[0];
lastName=user.name.split(“”[1];
}捕获(例外e){
firstName=user.name;
lastName=“”;
}
Log.e(“Twitter”、“SocialId:+SocialId+”\t域名:+firstName+”\t域名:+lastName+“\tEmail:+email”);
}
@凌驾
公共无效失败(TwitterException异常){
Log.e(“Twitter”,“获取用户数据失败”+异常.getMessage());
}
});
}
@凌驾
受保护的void onActivityResult(int-requestCode、int-resultCode、@Nullable-Intent-data){
super.onActivityResult(请求代码、结果代码、数据);
if(twitterAuthClient!=null){
onActivityResult(请求代码、结果代码、数据);
}
}

Hi,当安装并登录应用程序时,您是如何在不打开webview的情况下使用twitter登录的。请尝试在此处添加一些详细信息来解释答案,而不是将我指向某个URL。谢谢
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);
    }
}