• Java基础知识强化之网络编程笔记21:Android网络通信之 Android常用OAuth登录(获取令牌信息)


    1. 首先我们去下载开发相关SDK(Android)

    下载百度使用OAuth的SDK(Android),如下:

    下载链接为:http://developer.baidu.com/wiki/index.php?title=docs/oauth/showcase

    2. 解压SDK压缩包,如下:

    打开这里的oauth2-api-android-sdk说明文档,这里有使用SDK的详细步骤,下面通过案例演示。

    3. 案例演示:

    (1)申请应用AppKey

         AppKey在百度开放平台申请,用于标识您的应用程序。地址为http://developer.baidu.com

    (2)修改redirect url地址(回调地址必须填写为bdconnect://success,不然会报错

    在应用管理-》OAuth安全设置-》授权回调页 中填写以下地址:

    bdconnect://success

    如下图:

    (3)新建一个Android工程,如下:

    (4)导入JAR包到上面创建的Android项目之中,如下:

    复制baidu-android-openapi-sdk.jar到上面创建的Android项目libs文件夹下,如下:

    然后添加jar包构建路径:

    还有一种方式添加jar包构建路径,如下:

      右键点击你的工程,然后选择"Properties"; 

      在工程属性对话框左边选择"Java Build Path"; 

    •  在工程属性对话框主窗口选择"Libraries"; 

    •  点击“Add JARs”,添加.jar。

    这个时候工程如下图:

     

    (5)编写activity_main.xml,如下:

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical"
     6     tools:context="com.himi.oauthdemo.MainActivity" >
     7     
     8     <Button
     9         android:id="@+id/btn_oauth"
    10         android:layout_width="wrap_content"
    11         android:layout_height="wrap_content"
    12         android:text="Baidu OAuth"
    13         android:onClick="onClickOAuth"/>
    14 
    15     <TextView
    16         android:id="@+id/tv_access_token"
    17         android:layout_width="wrap_content"
    18         android:layout_height="wrap_content"
    19         android:text="@string/hello_world" />
    20 
    21 </LinearLayout>

    布局效果,如下:

    (6)MainActivity.java,如下:

     1 package com.himi.oauthdemo;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.view.View;
     6 import android.widget.TextView;
     7 
     8 import com.baidu.api.Baidu;
     9 import com.baidu.api.BaiduDialog.BaiduDialogListener;
    10 import com.baidu.api.BaiduDialogError;
    11 import com.baidu.api.BaiduException;
    12 
    13 public class MainActivity extends Activity {
    14     private TextView mTvAccessToken = null;
    15     
    16 
    17     @Override
    18     protected void onCreate(Bundle savedInstanceState) {
    19         super.onCreate(savedInstanceState);
    20         setContentView(R.layout.activity_main);
    21         mTvAccessToken = (TextView) findViewById(R.id.tv_access_token);
    22     }
    23     
    24     public void onClickOAuth(View v) {
    25         //调用百度授权
    26         final Baidu baidu = new Baidu("fnREQtw4FLhdL932ESpj68Gw", this);
    27         /**
    28          * authorize(activity, isForceLogin, isConfirmLogin, listener);
    29          * 参数activity:Activity
    30          * 参数isForceLogin:是否强制登录
    31          * 参数isConfirmLogin: 是否让用户每次确认登录
    32          * 参数listener:监听接口
    33          */
    34         baidu.authorize(this, true, true, new BaiduDialogListener() {
    35             
    36             /**
    37              * 百度登录错误的时候,回调此方法
    38              */
    39             public void onError(BaiduDialogError arg0) {
    40                 refreshUI("error");
    41                 
    42             }
    43             
    44             /**
    45              * 百度登录完成成功的时候,回调此方法
    46              */
    47             public void onComplete(Bundle arg0) {
    48                 refreshUI(baidu.getAccessToken());
    49                 
    50             }
    51             
    52             /**
    53              * 用户取消,回调此方法
    54              */
    55             public void onCancel() {
    56                 // TODO 自动生成的方法存根
    57                 refreshUI("cancel");
    58             }
    59             
    60             /**
    61              * 异常信息处理,回调此方法
    62              */
    63             public void onBaiduException(BaiduException arg0) {
    64                 refreshUI("Exception");
    65                 
    66             }
    67         });
    68         
    69     }
    70     
    71     private void refreshUI(final String msg) {
    72         runOnUiThread(new Runnable() {
    73             
    74             public void run() {
    75                 mTvAccessToken.setText(msg);
    76                 
    77             }
    78         });
    79         
    80     }
    81 
    82 
    83 }

    (7)AndroidMainfest.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3     package="com.himi.oauthdemo"
     4     android:versionCode="1"
     5     android:versionName="1.0" >
     6 
     7     <uses-sdk
     8         android:minSdkVersion="15"
     9         android:targetSdkVersion="17" />
    10 
    11     <uses-permission android:name="android.permission.INTERNET" />
    12     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    13 
    14     <application
    15         android:allowBackup="true"
    16         android:icon="@drawable/ic_launcher"
    17         android:label="@string/app_name"
    18         android:theme="@style/AppTheme" >
    19         <activity
    20             android:name=".MainActivity"
    21             android:label="@string/app_name" >
    22             <intent-filter>
    23                 <action android:name="android.intent.action.MAIN" />
    24 
    25                 <category android:name="android.intent.category.LAUNCHER" />
    26             </intent-filter>
    27         </activity>
    28     </application>
    29 
    30 </manifest>

    (8)布署到模拟器上,如下:

  • 相关阅读:
    Linux
    数据库
    第一篇文章
    解决VMware虚拟机Ubuntu 无法上网问题
    mybatis之sql标签与include标签
    第一个只出现一次的字符
    位运算 -- 只出现一次的的数字
    Oracle递归 start with...connect by...prior
    MyBatis中#{ }和${ }的区别
    表的转置 行转列: DECODE(Oracle) 和 CASE WHEN 的异同点
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4890346.html
Copyright © 2020-2023  润新知