`

android客户端连接人人网之一----获取授权

 
阅读更多
连接人人网,有两种方法,参考人人网的官网:
http://wiki.dev.renren.com/wiki/%E7%A7%BB%E5%8A%A8%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%8E%A5%E5%85%A5
第一种是直接使用人人网开放平台提供的各种接口,如用作验证和授权的OAuth 2.0,提供数据的底层Rest API,以及嵌入各种Widget。
第二种是使用人人网开放平台官方封装的开源Android SDK。
我们使用第一种:
首先去申请一个应用:http://dev.renren.com/app
完成后你将得到:API Key和Secret Key即“client_id”和“client_secret”,便可以使用OAuth2.0进行验证授权。开发者中心页面中API Key就是人人OAuth2.0中的“client_id”,Secret Key就是“client_secret”。
人人网为没有Web服务器的客户端应用提供了一个通用的URL:http://graph.renren.com/oauth/login_success.html。

流程如下:

在应用中嵌入一个浏览器控件,并使用客户端流程定向控件到人人OAuth 2.0 Authorize Endpoint(https://graph.renren.com/oauth/authorize):

https://graph.renren.com/oauth/authorize?client_id=YOUR_API_KEY&redirect_uri=http://graph.renren.com/oauth/login_success.html

经过用户验证、应用授权,人人OAuth2.0将把浏览器控件定向导'redirect_uri'(http://graph.renren.com/oauth/login_success.html),并在URI Fragment中追加Access Token:http://graph.renren.com/oauth/login_success.html#access_token=...当应用发现浏览器的控件的URL跳转到这个URL上时,从URL中解析出Access Token。



在Android中加载html用WebView控件,由于Android主要是触屏,因此需要加display=touch参数,完整的URL为

https://graph.renren.com/oauth/authorize?client_id=05d3794614f244c39e300c65f5f68a9e&response_type=token&display=touch&redirect_uri=http://graph.renren.com/oauth/login_success.html

具体登录的代码如下:
public class RenrenLoginActivity extends Activity {  
    public final static String TAG = "RenrenLoginActivity";  
    private WebView renrenLoginWebView; // WebView 控件,用于显示从人人网请求得到html授权页面  
      
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.renren_login_web_view);  
        renrenLoginWebView = (WebView) findViewById(R.id.renren_login_web_view); // 得到 WebView 控件  
          
        //对WebView进行设置(对JS的支持,对缩放的支持,对缓存模式的支持)  
        WebSettings webSettings = renrenLoginWebView.getSettings();  
        webSettings.setJavaScriptEnabled(true);   
        webSettings.setBuiltInZoomControls(true);  
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);  
          
        // 根据client_id取得到人人服务器人人对你的应用授权,如果成功则返回人人网登陆页面的html文件,并在WebView控件上显示  
        // 此时用户需要输入自己人人账号的用户名、密码并点击登陆  
        renrenLoginWebView.loadUrl("https://graph.renren.com/oauth/authorize?"+  
                "client_id=换成你自己的api key&response_type=token"+  
                "&display=touch&redirect_uri=http://graph.renren.com/oauth/login_success.html");  
          
        renrenLoginWebView.setWebViewClient(new WebViewClient() {  
  
            //击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边  
            @Override  
            public boolean shouldOverrideUrlLoading(WebView view, String url) {  
                view.loadUrl(url);  
                return true;  
            }  
  
            @Override  
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {  
                handler.proceed();//让webview处理https请求  
            }  
              
            @Override  
            public void onPageFinished(WebView view, String url) {  
                String url0 = renrenLoginWebView.getUrl();  
                String access_token = "";  
                String expires_in = "";  
                Log.i(TAG, "URL = " + url0);  
                if(url0 != null) {  
                    if(url0.contains("access_token=")) { // 从URL中解析得到 access_token  
                        access_token = url0.substring(url0.indexOf("access_token=") + 13, url0.length() - 19);  
                        try {  
                            access_token = URLDecoder.decode(access_token, "utf-8"); // 制定为utf-8编码  
                        } catch (UnsupportedEncodingException e) {  
                            e.printStackTrace();  
                        }  
                        Log.i(TAG, "access_token = " + access_token);  
                    }  
                    if(url0.contains("expires_in=")) { // 从URL中解析得到 expires_in  
                        expires_in = url0.substring(url0.indexOf("expires_in=") + 11, url0.length());  
                        Log.i(TAG, "expires_in = " + expires_in);  
                    }  
                    RenrenUtil.access_token = access_token; // 将解析得到的 access_token 保存起来  
                    RenrenUtil.expires_in = expires_in; // 将解析得到的 expires_in 保存起来  
                      
                    //输入用户名、密码登陆成功,进行页面跳转  
                    if(RenrenUtil.access_token.length() != 0) {  
                        Intent intent = new Intent(RenrenLoginActivity.this, RenrenFriendsActivity.class);  
                        startActivity(intent);  
                    }  
                }  
                super.onPageFinished(view, url);  
            }             
        });  
    }  
}  

经测试,成功。
分享到:
评论

相关推荐

    人人-Android客户端-高仿-源码

    这个源码项目是对人人网Android客户端的高度仿制,旨在提供一个学习和参考的平台,帮助开发者深入理解移动应用的开发流程,尤其是社交应用的设计和实现。它包含了完整的代码、资源文件以及图片素材,为开发者提供了...

    Android应用源码之空气质量检测客户端项目-IT计算机-毕业设计.zip

    Android应用源码之空气质量检测客户端项目-IT计算机-毕业设计.zip Android应用源码之空气质量检测客户端项目-IT计算机-毕业设计.zip Android应用源码之空气质量检测客户端项目-IT计算机-毕业设计.zip Android应用...

    android客户端和服务端的连接

    以上就是关于“android客户端和服务端的连接”这一主题的主要知识点,实际项目中可能还会涉及API设计、数据缓存策略、网络性能优化等多个方面。理解并熟练掌握这些知识,能帮助开发者构建高效、稳定的网络通信功能。

    新闻管理系统,服务器、Android客户端和PC端news-manager-system-master.zip

    - **代码示例**:压缩包中可能包含一个运行示例,展示了如何使用Android客户端获取、显示新闻数据。 - **学习资源**:开发者可以参考这些示例代码理解新闻系统的实现细节和最佳实践。 6. **数据解析与展示**: -...

    WebSocket安卓客户端实现详解(二)--客户端发送请求

    WebSocket是Web应用中的一种实时通信协议,它允许服务器与客户端之间进行双向通信,即服务器可以主动向客户端推送数据,而不仅仅是响应客户端的请求。在安卓客户端实现WebSocket时,我们需要了解和掌握以下几个关键...

    057集-Android客户端与服务端交互-服务端代码

    在本节"057集-Android客户端与服务端交互-服务端代码"的视频教程中,我们将深入探讨Android应用程序如何与服务端进行有效且安全的通信,这对于开发任何涉及网络功能的Android应用来说都是至关重要的。这个教程针对的...

    duic 配置中心 Java-Android 客户端工具包-duic-java-client.zip

    "duic 配置中心 Java-Android 客户端工具包-duic-java-client.zip" 是一个专门为Java和Android开发者设计的客户端工具包,用于连接和交互与duic配置中心。这个工具包简化了在应用程序中集成远程配置的过程,使得...

    android客户端与后台服务器交互

    在本示例中,Android客户端负责用户界面、数据获取和显示。它使用HTTP或HTTPS协议通过网络与服务器进行通信。Android SDK提供了HttpURLConnection和HttpClient等API来实现网络请求,但现在推荐使用Retrofit、OkHttp...

    白宫Android客户端 wh-app-android

    【标题】:“白宫Android客户端 wh-app-android”是一个专门为Android用户设计的应用程序,它允许用户方便地访问和互动与白宫的相关信息。这个应用是白宫官方在移动设备上的一个接口,为公众提供了一个窗口,以了解...

    Android-Daily内容采集的Android客户端

    【Android-Daily内容采集的Android客户端】是一款遵循Material Design设计规范、采用MVP(Model-View-Presenter)架构模式,并结合RxJava和Retrofit技术实现的内容采集应用。这个项目为开发者提供了一个完整的...

    android-support-v4-v7-v13-v14-v17(官方最新完整版)

    android-support-v4-v7-v13-v14-v17(官方最新完整版),官方最新版的,压缩包内包含android-support-v4、android-support-v7-appcompat,android-support-v7-cardview,android-support-v7-gridlayout,android-support-...

    xmpp服务器和android客户端源码

    - **资源绑定**: 减少服务器负载,提高效率,每个客户端连接只绑定一个资源。 - **压缩和优化数据传输**: 对XML数据进行压缩,减少网络带宽占用,提高传输速度。 6. **拓展功能**: - **多用户聊天(MUC)**: ...

    ksoap2-android-assembly-2.6.5-jar-with-dependencies.jar

    ksoap2-android-assembly-2.6.5-jar-with-dependencies.jar 要是需要最新的,下载地址: http://code.google.com/p/ksoap2-android/

    android aocket客户端连接

    在现代移动应用开发中,客户端(如Android应用程序)与服务器之间的实时通信是非常重要的功能之一。Android平台提供了多种方式来实现网络通信,其中Socket编程是一种非常基础且强大的方法。通过Socket,Android设备...

    android客户端与服务器数据交互的Demo

    综上所述,Android客户端与服务器的数据交互是一个涉及网络连接、请求构建、响应处理、数据解析等多个环节的过程。在实际开发中,开发者需要熟练掌握各种网络请求库、数据解析工具以及安全策略,以实现高效、安全的...

    android使用webrtc音视频传输客户端和服务器源码

    ProjectRTC是一个WebRTC的PC端项目,实现了WebRTC的服务器功能和PC客户端功能,我们拿来当服务器用的,运行需要安装Node.JS。使用方法如下: 安装Node.JS ProjectRTC根目录下,命令行:npm install 命令行:node ...

    android客户端+服务端

    在Android应用开发中,"客户端+服务端"的架构模式是常见的设计方式,它涉及到Android客户端与远程服务器之间的数据通信和交互。这种模式允许应用程序在本地执行用户界面操作,同时利用服务器的计算能力和存储资源来...

    android的XMPP客户端

    在Android平台上实现XMPP(Extensible Messaging and Presence Protocol)客户端是一项常见的任务,因为XMPP是一种广泛使用的即时通讯协议,尤其适用于构建实时通信应用,如聊天、视频通话等。本篇文章将深入探讨...

    android客户端与后台服务器交互demo

    在Android应用开发中,客户端与后台服务器的交互是不可或缺的一部分,尤其在实现数据的获取、存储和更新等操作时。本示例项目“android客户端与后台服务器交互demo”旨在演示如何在Android应用中与由Structs和...

Global site tag (gtag.js) - Google Analytics