第三方登录(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客户瑞,得到令牌

 1   public void onClickGetAccessToken(View btn){
 2         mBaidu = new Baidu(API_KEY, this);
 3         //由于取token是在其它线程中的网络请求,所以它的函数不可操作UI
 4         mBaidu.authorize(this, false, true, new BaiduDialogListener() {
 5             
 6             @Override
 7             public void onError(BaiduDialogError arg0) {
 8                 refreshTokenText("onError");
 9             }
10             
11             @Override
12             public void onComplete(Bundle arg0) {
13                 mToken = mBaidu.getAccessToken();
14                 refreshTokenText(mToken);
15             }
16             
17             @Override
18             public void onCancel() {
19                 refreshTokenText("onCancel");
20             }
21             
22             @Override
23             public void onBaiduException(BaiduException arg0) {
24                 refreshTokenText("onBaiduException");
25             }
26         });
27     }

4.4 得到令牌后取个人信息

调用的是异步接口

 1   public void onClickAsyncGetUserInfo(View btn){
 2         AsyncBaiduRunner asyncRun = new AsyncBaiduRunner(mBaidu);
 3         asyncRun.request(USER_INFO_URL, null, "GET", new RequestListener(){
 4             
 5             @Override
 6             public void onIOException(IOException arg0) {
 7                 refreshResultText(" get user onIOException");
 8             }
 9             
10             @Override
11             public void onComplete(String jsonResult) {
12                 refreshResultText(jsonResult);
13             }
14             
15             @Override
16             public void onBaiduException(BaiduException arg0) {
17                 refreshResultText(" get user onBaiduException");
18             }
19         });
20     }

 

4.5 完成代码

  1 package com.example.oauthsample;
  2 
  3 import java.io.IOException;
  4 
  5 import com.baidu.api.AsyncBaiduRunner;
  6 import com.baidu.api.AsyncBaiduRunner.RequestListener;
  7 import com.baidu.api.Baidu;
  8 import com.baidu.api.BaiduDialog.BaiduDialogListener;
  9 import com.baidu.api.BaiduDialogError;
 10 import com.baidu.api.BaiduException;
 11 import com.google.gson.Gson;
 12 import com.google.gson.reflect.TypeToken;
 13 
 14 import android.app.Activity;
 15 import android.os.Bundle;
 16 import android.view.View;
 17 import android.widget.TextView;
 18 import android.widget.Toast;
 19 
 20 public class MainActivity extends Activity {
 21     
 22     //这是在developer.baidu.com申请到的API_KEY
 23     private static final String API_KEY = "2PBcXbkO1kWyjWHPXeBT2KFz";
 24     
 25     //得到令牌后取用户信息的url
 26     private static final String USER_INFO_URL = "https://openapi.baidu.com/rest/2.0/passport/users/getInfo";
 27     
 28     private TextView mAccessToken,mResult;
 29     private String mToken ;
 30     private Baidu mBaidu ;
 31     private Gson mGson;
 32     
 33     private void refreshTokenText(final String msg){
 34         mAccessToken.post(new Runnable() {
 35             @Override
 36             public void run() {
 37                 mAccessToken.setText(msg);
 38             }
 39         });
 40     }
 41     private void refreshResultText(final String msg){
 42         mResult.post(new Runnable() {
 43             @Override
 44             public void run() {
 45                 mResult.setText(msg);
 46             }
 47         });
 48     }
 49     public void onClickSyncGetUserInfo(View btn){
 50         if (mToken == null) {
 51             Toast.makeText(this, "token is null", Toast.LENGTH_SHORT).show();
 52             return;
 53         }
 54         new Thread(){//非UI线程
 55             public void run() {
 56                 try {
 57                     final String result = mBaidu.request(USER_INFO_URL, null, "GET");
 58                     
 59                     //解析JSOn(将json反序列化成对象)的方式1,当返回的是简单对象(只一个对象)时用gson.fromJson(string,xx.class);
 60                     final BaiduUser usr = mGson.fromJson(result, BaiduUser.class);
 61                     
 62                     //解析JSOn(将json反序列化成对象)的方式2,当返回的是复杂对象,要用AVA泛型时,如有个集合(0-n)要用gson.fromJson(string,new TypeToken<XXX>(){}.getType());
 63                     //如usr2
 64                     final BaiduUser usr2 = mGson.fromJson(result,new TypeToken<BaiduUser>(){}.getType());
 65                     
 66                     
 67                     runOnUiThread(new Runnable() {//到UI线程执行
 68                         @Override
 69                         public void run() {
 70                             mResult.setText(result);//UI线程中的控件
 71                             mResult.append("\n username : " + usr.username);
 72                             mResult.append("\n has bind mobile : " + usr.hasBindMobile);
 73                             mResult.append("\n username : "+usr2.userid);
 74                             
 75                             //将对象序列化成json数据
 76                             mResult.append("\n baidu user is : \n" + mGson.toJson(usr));
 77                             
 78                         }
 79                     });
 80                 } catch (IOException e) {
 81                     e.printStackTrace();
 82                 } catch (BaiduException e) {
 83                     e.printStackTrace();
 84                 }
 85                 
 86             };
 87         }.start();
 88     }
 89     public void onClickAsyncGetUserInfo(View btn){
 90         AsyncBaiduRunner asyncRun = new AsyncBaiduRunner(mBaidu);
 91         asyncRun.request(USER_INFO_URL, null, "GET", new RequestListener(){
 92             
 93             @Override
 94             public void onIOException(IOException arg0) {
 95                 refreshResultText(" get user onIOException");
 96             }
 97             
 98             @Override
 99             public void onComplete(String jsonResult) {
100                 refreshResultText(jsonResult);
101             }
102             
103             @Override
104             public void onBaiduException(BaiduException arg0) {
105                 refreshResultText(" get user onBaiduException");
106             }
107         });
108     }
109     public void onClickGetAccessToken(View btn){
110         mBaidu = new Baidu(API_KEY, this);
111         //由于取token是在其它线程中的网络请求,所以它的函数不可操作UI
112         mBaidu.authorize(this, false, true, new BaiduDialogListener() {
113             
114             @Override
115             public void onError(BaiduDialogError arg0) {
116                 refreshTokenText("onError");
117             }
118             
119             @Override
120             public void onComplete(Bundle arg0) {
121                 mToken = mBaidu.getAccessToken();
122                 refreshTokenText(mToken);
123             }
124             
125             @Override
126             public void onCancel() {
127                 refreshTokenText("onCancel");
128             }
129             
130             @Override
131             public void onBaiduException(BaiduException arg0) {
132                 refreshTokenText("onBaiduException");
133             }
134         });
135     }
136     //-------------------------------------------
137     @Override
138     protected void onCreate(Bundle savedInstanceState) {
139         super.onCreate(savedInstanceState);
140         setContentView(R.layout.activity_main);
141         
142         mGson = new Gson();
143         
144         mAccessToken = (TextView) findViewById(R.id.tv_access_token);
145         mResult = (TextView) findViewById(R.id.tv_result);
146     }
147     
148 }
View Code

 

转载于:https://www.cnblogs.com/sjjg/p/4716280.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值