第三方登录(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 ...
随机推荐
- REST API 基于ACCESS TOKEN 的权限解决方案
REST 设计原则是statelessness的,而且但客户端是APP时,从APP发起的请求,不是基于bowers,无法带相同的sessionid,所以比较好的方案是每次请求都带一个accesstok ...
- 【BZOJ】【3238】【AHOI2013】diff(差异)
题目链接:www.lydsy.com/JudgeOnline/problem.php?id=3238 后缀数组 这题题面给的暗示性就很强啊……一看就是要用后缀xx一家的算法,由于本蒻只会后缀数组所以就 ...
- 异步HTTP请求
一.自定义异步的HTTP请求 1.自定义一个AsyncHttpClient类,用于处理HTTP请求,实际原理就是新开启一个线程,调用HttpClient处理GET和POST请求 package com ...
- 【bzoj1009】[HNOI2008]GT考试
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3018 Solved: 1856[Submit][Statu ...
- 如何快速查看将C反汇编的代码
查看反汇编主要的思路在于将 流程,处理,算法 区分开来.1 函数调用:原C代码: int sum(int, int);int main(){ int c = sum(1, 2); printf(&qu ...
- 彻底理解js中this的指向
首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...
- Unity3D判断鼠标向右或向左滑动,响应不同的事件
private var first = Vector2.zero; private var second = Vector2.zero; function Update () { } function ...
- Winform设置相关
>> Winform查找根目录 1) AppDomain.CurrentDomain.BaseDirectory 地址为: d:\MyProject\Bin\ Application. ...
- 小圣求职记B:总集篇
1. 搜狐sohu 搜狐在正式招聘前邀请了部分应聘者到武汉研发中心开座谈会(因此简历尽量早投,机会多些),有研发的也有产品的,40人左右,座谈会期间介绍了搜狐汽车.北京研发中心.武汉研发中心和搜狐媒体 ...
- 查看w3wp进程占用的内存及.NET内存泄露,死锁分析--转载
一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方 ...