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客户瑞上第三方登录百度教程的更多相关文章

  1. Android 调用手机上第三方百度地图并传值给地图

    //移动APP调起Android百度地图方式举例 Intent intent = null; try { // intent = Intent.getIntent("intent://map ...

  2. 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发

    [原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文  http: ...

  3. 巧用第三方高速开发Android App 热门第三方SDK及框架

    巧用第三方高速开发Android App 热门第三方SDK及框架 历经大半年的时间,最终是把这门课程给录制出来了,也就在今天,正式在慕课网上上线了 项目地址:巧用第三方高速开发Android App ...

  4. 巧用第三方快速开发Android App 热门第三方SDK及框架

    巧用第三方快速开发Android App 热门第三方SDK及框架 历经大半年的时间,终于是把这门课程给录制出来了,也就在今天,正式在慕课网上上线了 项目地址:巧用第三方快速开发Android App ...

  5. android中正确导入第三方jar包

    android中正确导入第三方jar包 andriod中如果引入jar包的方式不对就会出现一些奇怪的错误. 工作的时候恰好有一个jar包需要调用,结果用了很长时间才解决出现的bug. 刚开始是这样引用 ...

  6. Android Studio中导入第三方库

    之前开发Android都是使用的eclipse,近期因为和外国朋友Timothy一起开发一款应用,他是从WP平台刚切换使用Android的,使用的开发环境时Android Studio,为了便于项目的 ...

  7. [置顶] android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so

    0:前言: 在第二篇中,我们主要介绍了丙方android公司利用乙方C++公司给的动态库,直接调用库中的方法,但是这样方式受限于: 乙方C++公司开发的动态库是否符合jni的规范,如果不规范,则不能直 ...

  8. Android开发数据库之第三方ORM框架(GreenDao)

    移动APP追求追求功能实现的同一时候,用户体验很重要.開始APP的同一时候.要时刻的切换开发人员的角色,如你开发的时候.是 站在APP的开发角色,处于生产者的位置:当你測试的时候.你应该把自己放在用户 ...

  9. [置顶] android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so

    0:前言 1:本文主要作为丙方android公司的身份来写 2:作者有不对的地方,请指出,谢谢 [第一篇:android利用jni调用第三方库——编写库libhello.so] [第二篇:androi ...

随机推荐

  1. spring framework项目源码github托管地址

    方法一:直接下载,github托管地址:http://repo.spring.io/simple/libs-release-local/org/springframework/spring/ 方法二: ...

  2. Codeforces 343D Water Tree 分类: Brush Mode 2014-10-05 14:38 98人阅读 评论(0) 收藏

    Mad scientist Mike has constructed a rooted tree, which consists of n vertices. Each vertex is a res ...

  3. console中一些不常用的实用方法

    console.group('分组1'); console.table( [ {key1: 1,key2: 2,key3: 3}, {key1: 1,key2: 2,key3: 3}, {key1: ...

  4. dojo简单添加一个Panel到父容器中

    this.contentPane = new ContentPane(); this.set("content", this.contentPane.domNode); this. ...

  5. Sqli-labs less 48

    Less-48 本关与less-46的区别在于报错注入不能使用,不进行错误回显,因此其他的方法我们依旧是可以使用的. 可以利用sort=rand(true/false)进行判断. http://127 ...

  6. ISIN编码

    国际证券识别编码(ISIN编码)是由国际标准化组织(ISO)制定的证券编码标准,并在<证券及相关金融工具-国际证券识别编码体系>(ISO6166)中正式发布.ISO6166主要规定了ISI ...

  7. Lucene教程--转载

    Lucene教程 1 lucene简介1.1 什么是lucene    Lucene是一个全文搜索框架,而不是应用产品.因此它并不像www.baidu.com 或者google Desktop那么拿来 ...

  8. codeforces 425B Sereja and Table(状态压缩,也可以数组模拟)

    题目 给出一个n*m的01矩阵, 让你最多改变k个里面的值(0变1,1变0), 使得0.1的连通分量是矩阵.输出最少步数 1 ≤ n, m ≤ 100; 1 ≤ k ≤ 10 题解: 如果01连通分量 ...

  9. JavaScript文件应该放在网页的什么位置

    JavaScript文件应该放在网页的什么位置 http://www.lihuai.net/qianduan/js/352.html 在<良好的JavaScript编程习惯>系列教程的第三 ...

  10. keil MDK中如何生成*.bin格式的文件

    在Realview MDK的集成开发环境中,默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件.虽然这两个格式的文件非常有利于ULINK2仿真器的下载和调试,但是ADS的用户更习惯 ...