第三方登录(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 ...
随机推荐
- css中的border还可以这样玩
在看这篇文章之前你可能会觉得border只是简单的绘制边框,看了这篇文章,我相信你也会跟我一样说一句"我靠,原来css中的border还可以这样玩".这篇文章主要是很早以前看了别人 ...
- C++中定义比较函数的三种方法
原文地址:http://fusharblog.com/3-ways-to-define-comparison-functions-in-cpp/ C++编程优与Pascal的原因之一是C++中存在ST ...
- BZOJ 1001: [BeiJing2006]狼抓兔子 最小割
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓 ...
- discuzx完全自定义设计模板门户首页,栏目,专题模板方法
第一种:门户首页模板(index.htm,保存于templatedefaultportal) <!--{subtemplate common/header}--> <style id ...
- Apple Remote Push Notifications
1.帮助文档参考: https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/Remote ...
- Codeforces Round #283 (Div. 2)
A:暴力弄就好,怎么方便怎么来. B:我们知道最多加10次, 然后每次加1后我们求能移动的最小值,大概O(N)的效率. #include<bits/stdc++.h> using name ...
- 简单CSS hack:区分IE6、IE7、IE8、Firefox、Opera
一.跨浏览器的网页设计一直是让人很头疼的问题,这不只是因为浏览器的版本众多,还有一个重要的原因是相同浏览器的不同时期的版本也会有差异,甚至是在不同操作同台上还会有不同.因此使CSS hack技术进行浏 ...
- 国内银行CNAPS CODE 查询
原地址:http://weekend.blog.163.com/blog/static/746895820127961346724/ 全国各地,无论哪个银行,无论什么分行,所有的CNAPS CODE都 ...
- this的使用、继承、super
1.this的使用 1)可以用于区分局部变量 Person(int age,string name) { this.age=age; this.name=name; } 2)构造方法中,用this调用 ...
- Install WindowBuilder for Eclipse
WindowBuilder官方下载安装说明地址:http://www.eclipse.org/windowbuilder/download.php 先祝各位能顺利安装上!以下是基于Eclipse in ...