==》

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

代码

ImageButton stratBtn=(ImageButton)diaView.findViewById(R.id.btn_start);
        stratBtn.setOnClickListener(new OnClickListener(){

@Override
            public void onClick(View arg0) {
                auth=new OAuth();
                auth.RequestAccessToken(AuthorizeActivity.this, CallBackUrl);
            }
            
        });

上面的代码中重点来说明一下 RequestAccessToken方法的第二参数CallBackUrl,这个参数是用户在新浪的页面中输入账户密码后完成认证后返回的地址,我这里是这样设置的CallBackUrl = "myapp://AuthorizeActivity",在AndroidManifest.xml中配置给AuthorizeActivity添加如下配置把myapp://AuthorizeActivity指向到AuthorizeActivity,这样当页面返回到AuthorizeActivity中就可以获取到传过来的oauth_verifier参数。

代码

<intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="myapp" android:host="AuthorizeActivity" /> 
</intent-filter>

再AuthorizeActivity如果来接收返回的oauth_verifier参数呢?接下来在AuthorizeActivity添加如下方法:

@Override
protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        //在这里处理获取返回的oauth_verifier参数
}

关于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添加如下代码:

代码

UserInfo user= auth.GetAccessToken(intent);
if(user!=null){
            DataHelper helper=new DataHelper(this);
            String uid=user.getUserId();
            if(helper.HaveUserInfo(uid))
            {
                helper.UpdateUserInfo(user);
                Log.e("UserInfo", "update");
            }else
            {
                helper.SaveUserInfo(user);
                Log.e("UserInfo", "add");
            }
        }

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

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

  1. android开发我的新浪微博客户端-用户授权页面UI篇(3.1)

    看上面的图,其实这个页面的UI实现不复杂,首先是背景部分的实现这个参考 android开发我的新浪微博客户端-载入页面UI篇(1.1),重点来讲讲这个半透明的弹出对话框窗口是如何实现的,首先新建名为A ...

  2. iphone开发我的新浪微博客户端-用户登录账号删除篇(1.6)

          在上一篇中我们完成账号的添加的功能,本篇就实现账号删除的功能,完成的具体效果看上(图5),当点击删除按钮的时候出现一个弹出对话框显示是否删除当前默认选择的用户,这个显示功能跟上一篇的添加几 ...

  3. android开发我的新浪微博客户端系列教程

    android开发我的新浪微博客户端-载入页面UI篇(1.1)http://www.1000phone.net/thread-7750-1-1.html android开发我的新浪微博客户端-载入页面 ...

  4. android 除了webview 浏览器控件,android开发我的新浪微博客户端-OAuth认证过程中用WebView代替原来的系统自带浏览器...

    前面的文章的OAuth认证过程在获取oauth_verifier码是是通过调用android系统带的浏览器进行用户授权认证的, 具体见:android开发我的新浪微博客户端-用户授权页面功能篇(3.2 ...

  5. iphone开发我的新浪微博客户端-用户登录准备篇(1.1)

    首先说一下我这个的实现思路,登录支持多个账号,也就是说可以保存多个微博账号登录的时候选择其中一个登录.多个账号信息保存在sqlite的数据库中, 每一个账号信息就是一条记录, 当用户启动微博客户端的时 ...

  6. android开发我的新浪微博客户端-OAuth篇(2.1)

    本篇说说关于OAuth授权认证的事情,新浪开放api都必须在这个基础上才能调用,所以有必要专门来讲讲,前面的文章中已经提到过关于新浪微博提供了OAuth和Base OAuth两种认证方式,并且本项目采 ...

  7. android开发我的新浪微博客户端-登录页面UI篇(4.1)

    首先回顾一下功能流程当用户开启软件显示载入页面时程序首先去sqlite库查询是否已经保存有用户的新浪微博的UserID号.Access Token.Access Secret的记录如果没有一条记录那么 ...

  8. android开发我的新浪微博客户端-登录页面功能篇(4.2)

    上一篇中完成了如上图的UI部分的实现,现在继续来讲功能的实现,用户登录操作主要就是账号列表显示和选择账号登录两个功能其他的都是些简单的辅助功能,首先是点击id为iconSelectBtn的ImageB ...

  9. android开发我的新浪微博客户端-登录页面功能篇

    首先是从数据库中获取所有的账户记录然后设置默认选中的用户账号代码如下: private void initUser(){//获取账号列表dbHelper=new DataHelper(this);us ...

最新文章

  1. Intel 公开安全新特性:CET
  2. Spring - Java/J2EE Application Framework 应用框架 第 12 章 Web框架
  3. mysql级联_MySQL 级联复制(A-B-C)
  4. Linux LCD 驱动实验
  5. AVS 帧内预测模式的汇编优化
  6. cloudstack+ceph中解决ceph单点问题
  7. HBase的数据迁移(含HDFS的数据迁移)
  8. 简单的amr转换mp3音频格式转换方法
  9. 学生成绩信息管理系统
  10. 转载:开源license总结
  11. 友好的可视化工具——trelliscope
  12. JAVA之HttpClient+Jsoup实现代理IP爬虫
  13. revit二次开发之教学视频
  14. 7.2—查找—Sear Insert Position
  15. 全新 Amazon RDS for MySQL 和 PostgreSQL 多可用区部署选项
  16. HTML5通过js调用手机摄像头
  17. 知乎热议:为什么华为天才计划博士刚毕业200年薪远超科研大牛?
  18. 中电十所提前批面经(通信算法岗)
  19. 五、再次执行hello-world.cc
  20. windows兼容模式

热门文章

  1. pandas 空字符串与na区别_pandas中对nan空值的判断
  2. oracle log.xml分析,Oracle 11g Alert Log日志位置及参数
  3. [CSS3] touch-action设置移动端拖动行为
  4. Android百度SDK定位
  5. Linux 系统编程技巧与概念 第14章 字节次序
  6. 阿里云rds mysql 并发_干货 | 浅析RDS MySQL 8.0语句级并发控制-阿里云开发者社区
  7. 20210627:力扣第247周周赛(上)
  8. 局域网传文件_手机和电脑之间互传比较大的文件,哪种方式比较好?
  9. 英文Ubuntu系统安装中文支持,中文UTF-8
  10. 用VB无窗口透明Usercontrol编写透明浮动按钮