第三方登录(2)Android客户瑞上第三方登录百度教程
1,在 http://developer.baidu.com/ 注册成开发者
不注册看不到开发相关的链接地址.点自己的用户名,在弹出菜单显示有 <用户中心> ,没有就是没注册.
2,找到关键文档,在文档中查找OAuth,了解相关知识

点docs/oauth这个连接 http://developer.baidu.com/wiki/index.php?title=docs/oauth

注意,baidu有多种授权方式,本例子中选用的是 Authorization Code
3.下载开发文档
下载其中的 Android-SDK-1.0.rar 里面有jar文件,jar源码,示例文件,详细开发教程

4,开始开发
4.1 在开发者服务中添加一个应用,这个应用就是第三方登录应用. 得到API Key和Secret Key

4.2 工程设置
其中OAuth安全设置很重要

点击 安全设置 进入如下页面

4.3写android客户瑞,得到令牌
public void onClickGetAccessToken(View btn){
mBaidu = new Baidu(API_KEY, this);
//由于取token是在其它线程中的网络请求,所以它的函数不可操作UI
mBaidu.authorize(this, false, true, new BaiduDialogListener() {
@Override
public void onError(BaiduDialogError arg0) {
refreshTokenText("onError");
}
@Override
public void onComplete(Bundle arg0) {
mToken = mBaidu.getAccessToken();
refreshTokenText(mToken);
}
@Override
public void onCancel() {
refreshTokenText("onCancel");
}
@Override
public void onBaiduException(BaiduException arg0) {
refreshTokenText("onBaiduException");
}
});
}
4.4 得到令牌后取个人信息
调用的是异步接口
public void onClickAsyncGetUserInfo(View btn){
AsyncBaiduRunner asyncRun = new AsyncBaiduRunner(mBaidu);
asyncRun.request(USER_INFO_URL, null, "GET", new RequestListener(){
@Override
public void onIOException(IOException arg0) {
refreshResultText(" get user onIOException");
}
@Override
public void onComplete(String jsonResult) {
refreshResultText(jsonResult);
}
@Override
public void onBaiduException(BaiduException arg0) {
refreshResultText(" get user onBaiduException");
}
});
}
4.5 完成代码
package com.example.oauthsample; import java.io.IOException; import com.baidu.api.AsyncBaiduRunner;
import com.baidu.api.AsyncBaiduRunner.RequestListener;
import com.baidu.api.Baidu;
import com.baidu.api.BaiduDialog.BaiduDialogListener;
import com.baidu.api.BaiduDialogError;
import com.baidu.api.BaiduException;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken; import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity { //这是在developer.baidu.com申请到的API_KEY
private static final String API_KEY = "2PBcXbkO1kWyjWHPXeBT2KFz"; //得到令牌后取用户信息的url
private static final String USER_INFO_URL = "https://openapi.baidu.com/rest/2.0/passport/users/getInfo"; private TextView mAccessToken,mResult;
private String mToken ;
private Baidu mBaidu ;
private Gson mGson; private void refreshTokenText(final String msg){
mAccessToken.post(new Runnable() {
@Override
public void run() {
mAccessToken.setText(msg);
}
});
}
private void refreshResultText(final String msg){
mResult.post(new Runnable() {
@Override
public void run() {
mResult.setText(msg);
}
});
}
public void onClickSyncGetUserInfo(View btn){
if (mToken == null) {
Toast.makeText(this, "token is null", Toast.LENGTH_SHORT).show();
return;
}
new Thread(){//非UI线程
public void run() {
try {
final String result = mBaidu.request(USER_INFO_URL, null, "GET"); //解析JSOn(将json反序列化成对象)的方式1,当返回的是简单对象(只一个对象)时用gson.fromJson(string,xx.class);
final BaiduUser usr = mGson.fromJson(result, BaiduUser.class); //解析JSOn(将json反序列化成对象)的方式2,当返回的是复杂对象,要用AVA泛型时,如有个集合(0-n)要用gson.fromJson(string,new TypeToken<XXX>(){}.getType());
//如usr2
final BaiduUser usr2 = mGson.fromJson(result,new TypeToken<BaiduUser>(){}.getType()); runOnUiThread(new Runnable() {//到UI线程执行
@Override
public void run() {
mResult.setText(result);//UI线程中的控件
mResult.append("\n username : " + usr.username);
mResult.append("\n has bind mobile : " + usr.hasBindMobile);
mResult.append("\n username : "+usr2.userid); //将对象序列化成json数据
mResult.append("\n baidu user is : \n" + mGson.toJson(usr)); }
});
} catch (IOException e) {
e.printStackTrace();
} catch (BaiduException e) {
e.printStackTrace();
} };
}.start();
}
public void onClickAsyncGetUserInfo(View btn){
AsyncBaiduRunner asyncRun = new AsyncBaiduRunner(mBaidu);
asyncRun.request(USER_INFO_URL, null, "GET", new RequestListener(){ @Override
public void onIOException(IOException arg0) {
refreshResultText(" get user onIOException");
} @Override
public void onComplete(String jsonResult) {
refreshResultText(jsonResult);
} @Override
public void onBaiduException(BaiduException arg0) {
refreshResultText(" get user onBaiduException");
}
});
}
public void onClickGetAccessToken(View btn){
mBaidu = new Baidu(API_KEY, this);
//由于取token是在其它线程中的网络请求,所以它的函数不可操作UI
mBaidu.authorize(this, false, true, new BaiduDialogListener() { @Override
public void onError(BaiduDialogError arg0) {
refreshTokenText("onError");
} @Override
public void onComplete(Bundle arg0) {
mToken = mBaidu.getAccessToken();
refreshTokenText(mToken);
} @Override
public void onCancel() {
refreshTokenText("onCancel");
} @Override
public void onBaiduException(BaiduException arg0) {
refreshTokenText("onBaiduException");
}
});
}
//-------------------------------------------
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); mGson = new Gson(); mAccessToken = (TextView) findViewById(R.id.tv_access_token);
mResult = (TextView) findViewById(R.id.tv_result);
} }
第三方登录(2)Android客户瑞上第三方登录百度教程的更多相关文章
- Android 调用手机上第三方百度地图并传值给地图
//移动APP调起Android百度地图方式举例 Intent intent = null; try { // intent = Intent.getIntent("intent://map ...
- 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发
[原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文 http: ...
- 巧用第三方高速开发Android App 热门第三方SDK及框架
巧用第三方高速开发Android App 热门第三方SDK及框架 历经大半年的时间,最终是把这门课程给录制出来了,也就在今天,正式在慕课网上上线了 项目地址:巧用第三方高速开发Android App ...
- 巧用第三方快速开发Android App 热门第三方SDK及框架
巧用第三方快速开发Android App 热门第三方SDK及框架 历经大半年的时间,终于是把这门课程给录制出来了,也就在今天,正式在慕课网上上线了 项目地址:巧用第三方快速开发Android App ...
- android中正确导入第三方jar包
android中正确导入第三方jar包 andriod中如果引入jar包的方式不对就会出现一些奇怪的错误. 工作的时候恰好有一个jar包需要调用,结果用了很长时间才解决出现的bug. 刚开始是这样引用 ...
- Android Studio中导入第三方库
之前开发Android都是使用的eclipse,近期因为和外国朋友Timothy一起开发一款应用,他是从WP平台刚切换使用Android的,使用的开发环境时Android Studio,为了便于项目的 ...
- [置顶] android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so
0:前言: 在第二篇中,我们主要介绍了丙方android公司利用乙方C++公司给的动态库,直接调用库中的方法,但是这样方式受限于: 乙方C++公司开发的动态库是否符合jni的规范,如果不规范,则不能直 ...
- Android开发数据库之第三方ORM框架(GreenDao)
移动APP追求追求功能实现的同一时候,用户体验很重要.開始APP的同一时候.要时刻的切换开发人员的角色,如你开发的时候.是 站在APP的开发角色,处于生产者的位置:当你測试的时候.你应该把自己放在用户 ...
- [置顶] android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so
0:前言 1:本文主要作为丙方android公司的身份来写 2:作者有不对的地方,请指出,谢谢 [第一篇:android利用jni调用第三方库——编写库libhello.so] [第二篇:androi ...
随机推荐
- BZOJ1565 植物大战僵尸
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1565 这题看上去并不会做,结果又是最大权闭合子图的裸题. 于是就去看了一发论文,明白建图的 ...
- [noip2010]关押罪犯 并查集
第一次看的时候想到了并查集,但是不知道怎么实现: 标解,f[i]表示i所属的集合,用f[i+n]表示i所属集合的补集,实现的很巧妙,可以当成一个使用并查集的巧妙应用: #include<iost ...
- CSS中的视觉格式化模型
视觉格式化模型 1. 简介 在视觉格式化模型中,文档树中的每个元素都将会根据盒模型产生零到多个盒子.这些盒子的布局由如下因素决定: 盒子的尺寸和类型 定位策略(正常文档流,浮动或者绝对定位) 和文档树 ...
- mac mysql connection
随着网络日益发展还有os x用户的增多,有可能会需要在自己的x系统中运行mysql+php环境,比如架设网站或者测试之类.简单步骤如下: 1.下载MySQL 5.x 发行版,解压并安装映像中的两个安装 ...
- 关于gzip压缩
关于gzip压缩 http://httpd.apache.org/docs/2.0/mod/mod_deflate.html http://www.phpchina.com/resource/manu ...
- redis 数据库维护之 key 大小获取
获得 redis key 大小 redis 用过一段时间后,发现一个KEY每天需更新值,但总是更新不全,故此为了定位问题,整理此脚本,辅助监控一下 写了两个脚本 注意:需要提前从 https://gi ...
- jQuery1.9.1--结构及$方法的工作原理源码分析
jQuery的$方法使用起来非常的多样式,接口实在太灵活了,有点违反设计模式的原则职责单一.但是用户却非常喜欢这种方式,因为不用记那么多名称,我只要记住一个$就可以实现许多功能,这个$简直就像个万能的 ...
- Assetbundle的杂七杂八
使用Assetbundle时可能遇到的坑 一 24 十一郎未分类 No Comments 转自 http://www.unitymanual.com/blog-3571-132.html 1.Edit ...
- Sqli-labs less 32
Less-32 利用上述的原理,我们可以进行尝试payload为: http://127.0.0.1/sqli-labs/Less-32/?id=-1%df%27union%20select%201, ...
- HDU 4569 Special equations(数学推论)
题目 //想不出来,看了解题报告 /* 题意:给你一个最高幂为4的一元多项式,让你求出一个x使其结果模p*p为0. 题解:f(x)%(p*p)=0那么一定有f(x)%p=0,f(x)%p=0那么一定有 ...