孙孙啊i之项目实战(六) 第三方登陆

原创 2016年05月31日 16:36:46

由于现在市场越来越开了,每个app 都基本上都有第三方登录;

下面介绍的是qq登陆

第一步 去官网创建一个应用 ,没有开发者账号可以点击这里查看流程并注册

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这时候我们获取APPID 和 APPKEY了,我们下载官网的jar包 下载地址

把jar包放到lib文件下,右键把jar包和项目依赖

这里写图片描述

接下来配置AndroidMainfest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="x x x x x x x">

    <!-- 添加下面这几个权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
       ......

        <!-- QQ配置 -->
        <activity
            android:name="com.tencent.tauth.AuthActivity"
            android:launchMode="singleTask"
            android:noHistory="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="这里填写你注册ID" />
            </intent-filter>
        </activity>
        <!-- SDK_V2.0后添加 -->
        <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:theme="@android:style/Theme.NoTitleBar" />

    </application>

这是我们完成了简单配置程序,下面我们试着回调函数,首先在登陆Activity页面初始化Tencent值,然后调用login方法登陆;

/**
 * 这是登陆界面
 */
public class LoginActivity extends BaseActivity{
    /**
     *  第一步定义一个全局的Tencent
     */
    private Tencent mTencent;
    /**
     * qq登陆成功返回的数据
     */
    private LoginParmas.Tencent mTencentParams;
    /**
     * 成功回调
     */
    private MyIUiLisener mLisener;
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setLayoutView(xxx);
        /**
         * 这里完成初始化
         */
        mTencent = Tencent.createInstance("这里填写获取的ID",this.getApplicationContext());
        mLisener = new MyIUiLisener();
        /**
         * 登陆按钮点击事件
         */
        findViewById(R.id.xxx).onClickLisener(new OnClickLisener(){
            @Override
            public void onClick(View v) {
                /**
                 *  这里是打开qq登陆界面并获取登陆一些token信息
                 *
                 *  "all"代表的是获取全部权限
                 */ 
                 mTencent.login(LoginActiviyt.this,"all",mLisener);
            }
        });
    }

    /**
     *  登陆成功的回调
     */
    @Override
    protected void onActivityResult(int requestCode,int resultCode,Intent data){
        //这里转接回调
        Tencent.onActivityResultData(requestCode, resultCode, data, mLisener);
    }


    /**
     *  登陆成功回调
     */
    class MyIUiLisener implements IUiLisener{

       @Override
        public void onComplete(Object o) {
            //这里是登陆成功的回调  jsonObject是成功返回回调的json数据
            JsonObject jsonObject = (JsonObject)o;
            //在这里用第三方json解析数据
             mTencentParmas = new Gson().
                     fromJson(jsonObject.toString(), LoginParams.Tencent.class);

        }

        @Override
        public void onError(UiError uiError) {
            //登陆失败的回调
        }

        @Override
        public void onCancel() {
            //返回登陆调用
        }
    }
}


}

/**
 * Created by zhiShen
 * Data:16/5/31 15:37
 * by:
 */
public class LoginParams {
    /**
     * qq登陆数据
     */
    public static class Tencent{
        private int ret;
        private String openid;
        private String access_token;
        private String pay_token;
        private String expires_in;
        private String pf;
        private String pfkey;
        private String msg;
        private int login_cost;
        private int query_authority_cost;
        private int authority_cost;

        public int getRet() {
            return ret;
        }

        public void setRet(int ret) {
            this.ret = ret;
        }

        public String getOpenid() {
            return openid;
        }

        public void setOpenid(String openid) {
            this.openid = openid;
        }

        public String getAccess_token() {
            return access_token;
        }

        public void setAccess_token(String access_token) {
            this.access_token = access_token;
        }

        public String getPay_token() {
            return pay_token;
        }

        public void setPay_token(String pay_token) {
            this.pay_token = pay_token;
        }

        public String getExpires_in() {
            return expires_in;
        }

        public void setExpires_in(String expires_in) {
            this.expires_in = expires_in;
        }

        public String getPf() {
            return pf;
        }

        public void setPf(String pf) {
            this.pf = pf;
        }

        public String getPfkey() {
            return pfkey;
        }

        public void setPfkey(String pfkey) {
            this.pfkey = pfkey;
        }

        public String getMsg() {
            return msg;
        }

        public void setMsg(String msg) {
            this.msg = msg;
        }

        public int getLogin_cost() {
            return login_cost;
        }

        public void setLogin_cost(int login_cost) {
            this.login_cost = login_cost;
        }

        public int getQuery_authority_cost() {
            return query_authority_cost;
        }

        public void setQuery_authority_cost(int query_authority_cost) {
            this.query_authority_cost = query_authority_cost;
        }

        public int getAuthority_cost() {
            return authority_cost;
        }

        public void setAuthority_cost(int authority_cost) {
            this.authority_cost = authority_cost;
        }
    }

}

上面完成了简单的登陆功能,接下来完成获取登陆用户详细的数据。回到刚才的Activity 页面。

public class LoginActivity extends BaseActivity 
{
    /**
     * qq登陆成功返回的数据
     */
    private LoginParmas.Tencent mTencentParams;

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setLayoutView(R.layout.xxx);

        //创建一个获取详情事件
        findViewById(R.id.xxx).onClickLisener(new OnClickLisener(){
            @Override
            public void onClick(View v)
            {
                /**
                 *  开启一个子线程
                 */
                 new Thear(new Runable()
                 {
                    @Override
                    public void run()
                    {
                try {
                    Bundle bundle = new Bundle();
                    bundle.putString("openid", mTencentParams.getOpenId());
                    bundle.putString("openkey", mTencentParams.getAccess_token());
                    bundle.putString("pf", mTencentParams.getPf());
                    bundle.putString("appid","你的appid");
                    bundle.putString("format", "json");
                    /**
                     *   参数1:列表 url :http://wiki.open.qq.com/wiki/website/API列表
                     *   参数2:需要传过去的参数
                     *   参数3:get或post请求;
                     *   返回用户空间的数据;
                     */
                    JSONObject object = mTencent.request("v3/user/get_info", bundle, Constants.HTTP_GET);
                    Log.e("TAG", "object-->" + object);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                    }
                 }).start();
            }
        }
    }
}

昨天被这玩意糊弄了一个下午,官网文档很多参数都不知道那里去了

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

孙孙啊i之项目实战(四) 广告页制作

日月如梭,光阴似箭.不知不觉到了我们最喜欢的星期五了。因为今天可以晚上狠狠的玩一局游戏,然后明天睡到大中午在慢慢起床了。- - 跑题了。今天我为大家带来的是广告页。感觉广告页大部分都是要么下载app,...

孙孙啊i 之项目实战(一) 创建BaseActivity

本人是第一次写csdn,写的不好请见谅 每个项目都有自己独自的框架和架构,包括Activity。一般项目都会自己写一个抽象的Activity。让所有Activity继承它。方便用于项目管理和统一性,还...

孙孙啊i之项目实战(五) 封装日志

今天本来想给大家带来的是第三方登陆…然后由于企鹅官网的属性有一个变量被移除了…再此跟大家说句对不起,尽量明天给大家带出来。 日志封装在开发占据了一定重要性,发布版本上线的时候如果被别人抓包测试出来...

孙孙啊i之项目实战(三) 引导页

开头语: 每个app刚下载第一次打开的时候。都会一个几张介绍APP功能类型图片。俗称引导页。现在基本不可缺 效果图如下:(像素低,别见怪) 废话不多说,现在开始做吧。 首先按照创建一个...

【java项目实战】Servlet详解以及Servlet编写登陆页面(二)

Servlet是Sun公司提供的一门用于开发动态web网页的技术。Sun公司在API中提供了一个servlet接口,我们如果想使用java程序开发一个动态的web网页,只需要实现servelet接口,...

【java项目实战】Servlet详解以及Servlet编写登陆页面(二)

http://blog.csdn.net/jiuqiyuliang/article/details/36424981     Servlet是Sun公司提供的一门用于开发动态web网页的技术...

IOS项目实战-登陆解析

用户登陆,一般是所有程序都有的基础功能,在IOS中的登陆页面用到了哪些控件,怎么布局才能提高用户体验。 在做这个Demo前,参考并分析了其它应用的登陆特点,主流的应用都是通过UITableVie...

项目实战No2 登陆注册

一 导航栏返回键统一处理 自定义NavigationController,重写push方法 /** * 拦截所有push进来的子控制器 * @param viewController 每一次pus...
  • ab20514
  • ab20514
  • 2015年09月02日 23:16
  • 489

项目实战篇-餐馆管理系统—MFC,PHP,MySql:2.登陆功能的实现

餐馆管理系统 MFC PHP MYSQL 登陆

Activiti(六)SSH项目实战

1.1 创建项目1.2 添加Jar包 1.3 更改配置文件1.3.1 连接数据库 1.3.2 Spring文件的配置2 项目配置applicationContext-dao.xml ...
  • ITlsc
  • ITlsc
  • 2016年07月22日 15:06
  • 889
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:孙孙啊i之项目实战(六) 第三方登陆
举报原因:
原因补充:

(最多只允许输入30个字)