我正在尝试使用Twitter提供的新Fabric API来让用户登录我的应用。在完成所有必要步骤后,我完全按照教程(至少我认为我有,也许我犯了一些错误)here。现在,当我点击登录按钮并验证按钮时,会给出成功的响应,但是当我去获取Twitter会话后,我得到了一个看起来像
的异常Caused by: java.lang.IllegalStateException: Must start Twitter Kit with Fabric.with() first
(再次,我按照教程一直到T,但如果你能想到任何事情,那么我愿意尝试一下)
答案 0 :(得分:15)
Fabric SDK将功能分为称为Kits的模块。您必须通过Fabric.with()指明您希望使用哪些套件。这通常通过扩展Android的Application类来完成。
package com.example.app;
import android.app.Application;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
TwitterAuthConfig authConfig =
new TwitterAuthConfig("consumerKey",
"consumerSecret");
Fabric.with(this, new Twitter(authConfig));
// Example: multiple kits
// Fabric.with(this, new Twitter(authConfig),
// new Crashlytics());
}
}
更多信息:https://dev.twitter.com/twitter-kit/android/integrate
请参阅以下网站上的规范示例应用:https://github.com/twitterdev/cannonball-android
答案 1 :(得分:4)
我的案例错误是:在调用twitter工具包之前必须以Fabric.with()开头
解决方案:
在此之前我使用过: Fabric.with(这个,新的Crashlytics()); &安培; Fabric.with(这是一个新的Twitter(authConfig)); 终于不行了。
在整合Twitter之前我的代码是
- Fabric.with(这是新的Crashlytics());
整合Twitter之后我用
替换- Fabric.with(这个,新的Twitter(authConfig),新的Crashlytics());
现在像魅力一样工作,
答案 2 :(得分:3)
以下是我使用fabric实现Twitter登录的方式:
声明Twitter密钥和密码:
private static final String TWITTER_KEY = "r5nPFPbcDrzoJM9bIBCqyfHPK";
private static final String TWITTER_SECRET = "oJ8y2KPIySPpoBX3eCcqgcnmPGXLI94BR4g9ZztnApSmXQG9Ij ";
//Twitter Login Button
TwitterLoginButton twitterLoginButton;
onCreate()方法:
//Initializing TwitterAuthConfig, these two line will also added automatically while configuration we did
TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
Fabric.with(this, new Twitter(authConfig));
setContentView(R.layout.activity_main);
//Initializing twitter login button
twitterLoginButton = (TwitterLoginButton) findViewById(R.id.twitterLogin);
//Adding callback to the button
twitterLoginButton.setCallback(new Callback<TwitterSession>() {
@Override
public void success(Result<TwitterSession> result) {
//If login succeeds passing the Calling the login method and passing Result object
login(result);
}
@Override
public void failure(TwitterException exception) {
//If failure occurs while login handle it here
Log.d("TwitterKit", "Login with Twitter failure", exception);
}
});
3.override onActivityResult():
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//Adding the login result back to the button
twitterLoginButton.onActivityResult(requestCode, resultCode, data);
}
4.最后,登录():
public void login(Result<TwitterSession> result) {
//Creating a twitter session with result's data
TwitterSession session = result.data;
//Getting the username from session
final String username = session.getUserName();
//This code will fetch the profile image URL
//Getting the account service of the user logged in
Twitter.getApiClient(session).getAccountService()
.verifyCredentials(true, false, new Callback<User>() {
@Override
public void failure(TwitterException e) {
//If any error occurs handle it here
}
@Override
public void success(Result<User> userResult) {
//If it succeeds creating a User object from userResult.data
User user = userResult.data;
//Getting the profile image url
String profileImage = user.profileImageUrl.replace("_normal", "");
Log.d("done","name-->"+username + "url-->"+profileImage);
// Toast.makeText(this,"name-->"+username + "url-->"+profileImage,Toast.LENGTH_LONG).show();
}
});
}
您可以在login()
中使用用户名和个人资料图片网址,以便随时随地使用。
答案 3 :(得分:2)
与Android Studio的最新Twitter集成
以下链接提供了示例代码,您可以使用此代码集成twitter最新的sdk(Fabric)。它提供了我们可以轻松整合所有功能的时间