android开发我的新浪微博客户端-用户授权页面功能篇(3.2)


  在上一篇实现了用户授权页面的UI,如上图,接下来要做的就是在这个基础上完成功能部分真正实现用户的授权认证,这一篇是Android开发我 的新浪微博客户端-OAuth篇(2.1)的具体应用篇原理就不多解释了不懂的看OAuth篇即可。认证过程从点击开始按钮然后跳转到新浪的授权页面,接 着用户在新浪的页面里输入自己的账户和密码确定后返回用户授权页面。首先给开始按钮添加点击事件代码,代码中主要是调用我们前面android开发我的新 浪微博客户端-OAuth篇(2.1)完成的OAuth类的RequestAccessToken方法用来获取oauth_verifier,具体代码如 下:
  1. ImageButton stratBtn=(ImageButton)diaView.findViewById(R.id.btn_start);
  2.         stratBtn.setOnClickListener(new OnClickListener(){

  3.             @Override
  4.             public void onClick(View arg0) {
  5.                 auth=new OAuth();
  6.                 auth.RequestAccessToken(AuthorizeActivity.this, CallBackUrl);
  7.             }
  8.             
  9.         });
复制代码
上 面的代码中重点来说明一下 RequestAccessToken方法的第二参数CallBackUrl,这个参数是用户在新浪的页面中输入账户密码后完成认证后返回的地址,我这里 是这样设置的CallBackUrl = "myapp://AuthorizeActivity",在AndroidManifest.xml中配置给AuthorizeActivity添加如 下配置把myapp://AuthorizeActivity指向到AuthorizeActivity,这样当页面返回到 AuthorizeActivity中就可以获取到传过来的oauth_verifier参数。

  1. <intent-filter>
  2.         <action android:name="android.intent.action.VIEW" />
  3.         <category android:name="android.intent.category.DEFAULT" />
  4.         <category android:name="android.intent.category.BROWSABLE" />
  5.         <data android:scheme="myapp" android:host="AuthorizeActivity" />
  6. </intent-filter>
复制代码
再AuthorizeActivity如果来接收返回的oauth_verifier参数呢?接下来在AuthorizeActivity添加如下方法:
  1. @Override
  2. protected void onNewIntent(Intent intent) {
  3.         super.onNewIntent(intent);
  4.         //在这里处理获取返回的oauth_verifier参数
  5. }
复制代码
关 于onNewIntent的说明是这样的,onCreate是用来创建一个Activity也就是创建一个窗体,但一个Activty处于任务栈的顶端, 若再次调用startActivity去创建它,则不会再次创建。若你想利用已有的Acivity去处理别的Intent时,你就可以利用 onNewIntent来处理。在onNewIntent里面就会获得新的Intent,在这里AuthorizeActivity是属于已有的 Acivity,所以需要onNewIntent来处理接收返回的参数,获取oauth_verifier参数后OAuth还没有结束从android开 发我的新浪微博客户端-OAuth篇(2.1)描述来看还需要进行根据这个参数继续向新浪微博请求获取User_id、Access Token和Access Secret,在这里我把这些操作全部写在了GetAccessToken方法中。在onNewIntent添加如下代码:
  1. UserInfo user= auth.GetAccessToken(intent);
  2. if(user!=null){
  3.             DataHelper helper=new DataHelper(this);
  4.             String uid=user.getUserId();
  5.             if(helper.HaveUserInfo(uid))
  6.             {
  7.                 helper.UpdateUserInfo(user);
  8.                 Log.e("UserInfo", "update");
  9.             }else
  10.             {
  11.                 helper.SaveUserInfo(user);
  12.                 Log.e("UserInfo", "add");
  13.             }
  14.         }
复制代码

通过上面的代码完成了User_id、Access Token和Access Secret 获取并且保存到了sqlite库中,这样就完成了用户的OAuth认证,当需要调用新浪的api时只需要去sqlite库中找该用户的User_id、 Access Token和Access Secret 即可。到这里本篇就结束了,请关注下一篇。
原文地址:https://www.cnblogs.com/clarence/p/3229859.html