在应用中接入Twitter进行第三方登录时,开发人员遇到了一点问题,主要是概念有点混乱,这里把经验记录一下,帮助遇到同样问题的朋友。

一、注册应用并配置登录权限

这一步比较简单,就不多说了,直接去官网添加应用,给读写权限就行了。

网址:https://dev.twitter.com/apps

这一步完成后,最重要的是得到两个数据,一个是app_key,一个是app_secret。这两个字符串在后面会用到。

二、添加依赖的包(引用sdk)

这一步要注意的是,twitter的sdk是放在自己的maven库中,而现在AndroidStudio默认用的是jCenter,所以这里我们要在build.gradle中添加maven库,然后引入twitter sdk。

首先在整个项目的build.gradle中的 repositories 里添加maven如下:

repositories {
mavenCentral()
maven { url 'https://maven.fabric.io/public' }
jcenter()
}

然后在模块的build.gradle中添加maven库并引入sdk:

repositories {
mavenCentral()
maven { url 'https://maven.fabric.io/public' }
} dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
...
compile('com.twitter.sdk.android:twitter-core:1.3.1@aar') {
transitive = true;
}
}

这里大家可以看到出现了Fabric,这个是什么东西呢,其实是Twitter开发的开发者工具包。

三、在Mainfest中配置Fabric ApiKey

在AndroidManifest.xml中的application节点内添加如下代码:

<meta-data android:name="io.fabric.ApiKey" android:value="第一步中得到的app_id"/>

四、添加登录按钮

现在我们就可以在activity的布局文件中添加登录按钮了,代码如下:

<com.twitter.sdk.android.core.identity.TwitterLoginButton
android:id="@+id/twitter_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:clickable="true" />

五、sdk初始化

在我们注册登录按钮事件之前,还有一件事很重要,就是初始化sdk。这里有个需要注意的地方就是sdk的初始化一定要在setContentView之前

初始化代码如下:

import io.fabric.sdk.android.Fabric;
import com.twitter.sdk.android.core.TwitterCore;
import com.twitter.sdk.android.core.TwitterAuthConfig; public class LoginActivity extends AppCompatActivity { private static final String TWITTER_KEY = "app_id";
private static final String TWITTER_SECRET = "app_secret"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TwitterAuthConfig authConfig =
new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
Fabric.with(this, new TwitterCore(authConfig));
setContentView(R.layout.activity_login);
}
}

六、注册登录事件并添加回调

上面都完成后,就可以注册登录按钮事件并添加结果的回调了,然后获取token等信息。

整个登录activity代码如下:

import io.fabric.sdk.android.Fabric;
import com.twitter.sdk.android.core.Callback;
import com.twitter.sdk.android.core.Result;
import com.twitter.sdk.android.core.TwitterAuthToken;
import com.twitter.sdk.android.core.TwitterCore;
import com.twitter.sdk.android.core.TwitterAuthConfig;
import com.twitter.sdk.android.core.TwitterException;
import com.twitter.sdk.android.core.TwitterSession;
import com.twitter.sdk.android.core.identity.TwitterLoginButton; public class LoginActivity extends AppCompatActivity { private static final String TWITTER_KEY = "app_id";
private static final String TWITTER_SECRET = "app_secret";
TwitterLoginButton loginButton; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TwitterAuthConfig authConfig =
new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
Fabric.with(this, new TwitterCore(authConfig));
setContentView(R.layout.activity_login); loginButton = (TwitterLoginButton) findViewById(R.id.twitter_button);
loginButton.setCallback(new Callback<TwitterSession>() {
@Override
public void success(Result<TwitterSession> result) {
TwitterAuthToken authToken = result.data.getAuthToken();
String token = authToken.token;
String secret = authToken.secret;
Log.i("token", token);
Log.i("secret", secret);
} @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);
loginButton.onActivityResult(requestCode, resultCode, data);
}
}

以上就是完整的步骤了,希望对大家有帮助。

最新文章

  1. Ineedle驱动方式dpdk测试性能
  2. 面试题:return和finally执行
  3. jquery插件-表单验证插件-rules
  4. 读取NVRAM中的SN(barcode)
  5. SVG 2D入门6 - 坐标与变换
  6. spring--注入类型--构造方法(不常用)
  7. ccnu-线段树联系-单点更新2-B
  8. 什么是AAC音频格式 AAC-LC 和 AAC-HE的区别是什么
  9. 数组在C++和java中的区别
  10. 自己动手写处理器之第四阶段(1)——第一条指令ori的实现
  11. [].slice.call(arguments,1)
  12. CF813E Army Creation
  13. c++11线程池
  14. 尽量避免把弹窗加在window上,可以考虑把弹窗封装到控制器里面
  15. &lt;笔记&gt;字体文件的路径问题
  16. WITH RECOMPILE和OPTION(RECOMPILE)区别仅仅是存储过程级重编译和SQL语句级重编译吗
  17. 《Head First设计模式》批注系列(一)——观察者设计模式
  18. Jmeter调用 Json接口测试之关键点申明Content-Type类型
  19. (概率 01背包) Just another Robbery -- LightOJ -- 1079
  20. JTS基本概念和使用

热门文章

  1. POJ 3088 斯特林
  2. [USACO12FEB]牛券Cow Coupons
  3. POJ 1745 【0/1 背包】
  4. 使用cmd命令进行运行java(cmd命令输出Hello word)
  5. &#39;version&#39; contains an expression but should be a constant. @ line 13, column 11问题的解决
  6. http返回值含义
  7. [NOI2002]荒岛野人(exgcd,枚举)
  8. java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=testSelect], {ExactMatcher:fDisplayName=testSelect(cool.zsn.Dao.UserMapperTest)], {LeadingIdentifierMatcher:fClassName=cool.zsn
  9. 【MYSQL笔记3】MYSQL过程式数据库对象之存储过程的调用、删除和修改
  10. spring boot 搭建基本套路《1》