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. 了解javascript中的事件(二)

    本文目录如下: 零.寒暄 一.事件的分类 二.事件代理 2.1 问题引出 2.2 什么是事件代理 2.3 完整示例 二.事件代理 三.事件代理思想的用处 四.总结 零.寒暄 这篇博客本该出现在两个月以 ...

  2. display:inline-block 在IE6中实现{转}

    IE6/IE7下对display:inline-block的支持性不好. 1.inline元素的display属性设置为inline-block时,所有的浏览器都支持: 2.block元素的displ ...

  3. SWF Web播放器

    <HTML> <HEAD> <!-- saved from url=(0013)about:internet --> <TITLE> Untitled. ...

  4. Google Chrome 浏览器禁用缓存

    在使用 Google Chrome 浏览器调试 js 时,会发现修改完 js 不会立即生效,这是由于 chrome 浏览器缓存的原因,而在火狐下没有这个问题.经常使用 chrome 浏览器调试 js ...

  5. Windows Server

    1. Windows Server 在试用license过期后会出现2小时一次的关机.如果暂时无法注册或者激活,下面的方法可以试试 taskkill /f /im wlms.exe ping -n 1 ...

  6. 浅谈javascript中的数据类型和引用类型

    1.概述 javascript中有五种简单数据类型和一种复杂数据类型. 分别是:undefind, null, number, string ,boolean ----简单数据类型          ...

  7. Javascript获取URL参数值

    getQueryString: function (name) { var reg = new RegExp("(^|&)" + name.toLowerCase() + ...

  8. HDU 1385 Minimum Transport Cost (Dijstra 最短路)

    Minimum Transport Cost http://acm.hdu.edu.cn/showproblem.php?pid=1385 Problem Description These are ...

  9. 借助flexpaper实现word在线预览和打印

    为了实现word能够在web上尽量以原始的排版样式展现出来,选择基于activex控件的方式太过于依赖某种浏览器,并且存在可能需要花费金钱购买相应的控件产品:于是借助flexpaper这种flash展 ...

  10. Good Bye 2015 A. New Year and Days 签到

    A. New Year and Days   Today is Wednesday, the third day of the week. What's more interesting is tha ...