Android三方登录之新浪微博登录
来源:互联网 发布:程序员多少钱一个月 编辑:程序博客网 时间:2024/06/07 03:27
移动端需要尽可能的去减少用户的操作,拿登录来说,使用第三方登录一键登录自然在一定程度上优于传统的短信验证码。
那么集成新浪微博的一键登录需要哪些步骤呢?
1.在新浪后台注册应用,拿到关键ID。
2.集成代码
public class WBAuthActivity extends Activity { private static final String TAG = "weibosdk"; /** * 显示认证后的信息,如 AccessToken */ private TextView mTokenText; /** * 封装了 "access_token","expires_in","refresh_token",并提供了他们的管理功能 */ private Oauth2AccessToken mAccessToken; /** * 注意:SsoHandler 仅当 SDK 支持 SSO 时有效 */ private SsoHandler mSsoHandler; /** * @see {@link Activity#onCreate} */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_auth); // 获取 Token View,并让提示 View 的内容可滚动(小屏幕可能显示不全) mTokenText = (TextView) findViewById(R.id.token_text_view); TextView hintView = (TextView) findViewById(R.id.obtain_token_hint); hintView.setMovementMethod(new ScrollingMovementMethod()); // 创建微博实例 mSsoHandler = new SsoHandler(WBAuthActivity.this); // SSO 授权, 仅客户端 findViewById(R.id.obtain_token_via_sso).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mSsoHandler.authorizeClientSso(new SelfWbAuthListener()); } }); // SSO 授权, 仅Web findViewById(R.id.obtain_token_via_web).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mSsoHandler.authorizeWeb(new SelfWbAuthListener()); } }); // SSO 授权, ALL IN ONE 如果手机安装了微博客户端则使用客户端授权,没有则进行网页授权 findViewById(R.id.obtain_token_via_signature).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mSsoHandler.authorize(new SelfWbAuthListener()); } }); // 用户登出 findViewById(R.id.logout).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { AccessTokenKeeper.clear(getApplicationContext()); mAccessToken = new Oauth2AccessToken(); updateTokenView(false); } }); //更新token findViewById(R.id.refresh).setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { if (!TextUtils.isEmpty(mAccessToken.getRefreshToken())) { AccessTokenKeeper.refreshToken(Constants.APP_KEY, WBAuthActivity.this, new RequestListener() { @Override public void onComplete(String response) { } @Override public void onWeiboException(WeiboException e) { } }); } } }); // 从 SharedPreferences 中读取上次已保存好 AccessToken 等信息, // 第一次启动本应用,AccessToken 不可用 mAccessToken = AccessTokenKeeper.readAccessToken(this); if (mAccessToken.isSessionValid()) { updateTokenView(true); } } /** * 当 SSO 授权 Activity 退出时,该函数被调用。 * * @see {@link Activity#onActivityResult} */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // SSO 授权回调 // 重要:发起 SSO 登陆的 Activity 必须重写 onActivityResults if (mSsoHandler != null) { mSsoHandler.authorizeCallBack(requestCode, resultCode, data); } } private class SelfWbAuthListener implements com.sina.weibo.sdk.auth.WbAuthListener { @Override public void onSuccess(final Oauth2AccessToken token) { WBAuthActivity.this.runOnUiThread(new Runnable() { @Override public void run() { mAccessToken = token; if (mAccessToken.isSessionValid()) { // 显示 Token updateTokenView(false); // 保存 Token 到 SharedPreferences AccessTokenKeeper.writeAccessToken(WBAuthActivity.this, mAccessToken); Toast.makeText(WBAuthActivity.this, R.string.weibosdk_demo_toast_auth_success, Toast.LENGTH_SHORT).show(); } } }); } @Override public void cancel() { Toast.makeText(WBAuthActivity.this, R.string.weibosdk_demo_toast_auth_canceled, Toast.LENGTH_LONG).show(); } @Override public void onFailure(WbConnectErrorMessage errorMessage) { Toast.makeText(WBAuthActivity.this, errorMessage.getErrorMessage(), Toast.LENGTH_LONG).show(); } } /** * 显示当前 Token 信息。 * * @param hasExisted 配置文件中是否已存在 token 信息并且合法 */ private void updateTokenView(boolean hasExisted) { String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format( new java.util.Date(mAccessToken.getExpiresTime())); String format = getString(R.string.weibosdk_demo_token_to_string_format_1); mTokenText.setText(String.format(format, mAccessToken.getToken(), date)); String message = String.format(format, mAccessToken.getToken(), date); if (hasExisted) { message = getString(R.string.weibosdk_demo_token_has_existed) + "\n" + message; } mTokenText.setText(message); }}这里引用的官方demo,讲的很详细,不要忘记在清单文件里的配置及jniLibs的添加。
3.可能遇到的问题
在集成过程中,可能遇到一个问题便是没有返回,点击只闪一下的情况,这个情况是签名校验的问题,需要在官方下载一个MD5签名生成器,然后把签过名的app装载之后,打开签名生成器,获取到的值填到新浪后台,就可以解决这个问题了,在这里注意debug和release签名不同的情况,怕麻烦可以让debug和release使用同样的签名。
阅读全文
0 0
- Android三方登录之新浪微博登录
- 第三方登录之新浪微博
- Android 新浪微博第三方登录
- iOS 第三方登录之 新浪微博登录
- java 第三方登录之新浪微博登录
- 第三方登录之新浪微博登录
- android接入原生第三方登录(微信登录、QQ登录、新浪微博登录)
- android接入原生第三方登录(微信登录、QQ登录、新浪微博登录)
- android接入原生第三方登录(微信登录、QQ登录、新浪微博登录)
- android接入原生第三方登录(微信登录、QQ登录、新浪微博登录)
- Android应用接入第三方登录之新浪登录
- Android的集成新浪微博第三方登录
- Android新浪微博第三方登录的一些问题
- 新浪微博第三方登录体验
- 新浪微博的第三方登录
- 新浪微博第三方登录
- 新浪微博第三方登录有感
- 新浪微博第三方登录
- sqli-lab学习笔记(学习笔记)(11-20)
- Swift 字面量
- 目录与路径
- VS链接器工具错误 LNK2019:无法解析的外部符号
- Day19
- Android三方登录之新浪微博登录
- pat A1046
- (DFS)N皇后问题--HDOJ
- java-jvisualvm远程监控tomcat
- 深入剖析printf
- Redis Sorted-Sets数据类型
- Unity3D 官方文档 UGUI总览 自动布局组件的介绍
- NYOJ 找球号(二)(哈希表)
- 使用MyBatis-generator 自动生成MyBatis mapper代码