腾讯开放平台 集成qq登录

sdk下载地址:http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD

下载好导入项目中。

在开放平台拿到App_Id:

private Tencent mTencent;
private String APP_ID = "1107203056";//App的App_Id
private IUiListener loginListener;
private String SCOPE = "all";
private IUiListener userInfoListener;

 

在view层的java文件中添加以下代码:

 //初始化QQ登录分享的需要的资源
    private void initQqLogin() {
        mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());
        //创建QQ登录回调接口
        loginListener = new IUiListener() {
            @Override
            public void onComplete(Object o) {
                //登录成功后调用的方法
                JSONObject jo = (JSONObject) o;
                Toast.makeText(QQActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
                Log.e("COMPLETE:-------->", jo.toString());
                String openID;
                try {
                    openID = jo.getString("openid");
                    String accessToken = jo.getString("access_token");
                    String expires = jo.getString("expires_in");
                    mTencent.setOpenId(openID);
                    mTencent.setAccessToken(accessToken, expires);
                } catch (JSONException e) {
                    e.printStackTrace();
                } }

            @Override
            public void onError(UiError uiError) {
                //登录失败后回调该方法
                Toast.makeText(QQActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
                Log.e("LoginError:", uiError.toString());
            }

            @Override
            public void onCancel() {
                //取消登录后回调该方法
                Toast.makeText(QQActivity.this, "取消登录", Toast.LENGTH_SHORT).show();
            }
        };
        userInfoListener = new IUiListener() {
            @Override
            public void onComplete(Object o) {
                if(o == null){
                    return;
                }
                try {
                    JSONObject jo = (JSONObject) o;
                    Log.e("JO:",jo.toString());
                    int ret = jo.getInt("ret");
                    String nickName = jo.getString("nickname");
                    String gender = jo.getString("gender");
                    String qq_2 = jo.getString("figureurl_qq_2");
//                    edit.putString("ret",ret+"");
//                    edit.putString("nickName",nickName);
//                    edit.putString("qq_2",qq_2);
//                    edit.commit();
                    Log.e("ret","-------->"+ret);
                    Toast.makeText(QQActivity.this, "你好," + nickName,Toast.LENGTH_LONG).show();

                } catch (Exception e) {
                }
            }
            @Override
            public void onError(UiError uiError) {
            }
            @Override
            public void onCancel() {
            }
        };
    }

重写这个方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == Constants.REQUEST_LOGIN) {
        if (resultCode == -1) {
            Tencent.onActivityResultData(requestCode, resultCode, data, loginListener);
            Tencent.handleResultData(data, loginListener);
            UserInfo info = new UserInfo(this, mTencent.getQQToken());
            info.getUserInfo(userInfoListener);
            startActivity(new Intent(this, MainActivity.class));
            finish();
        }
    }
}

依次导包

在需要的点击事件中添加:

initQqLogin();
mTencent.login(this, SCOPE, loginListener);

在清单文件中

<!-- 注册SDKActivity -->
<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.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="tencent1105602574" /> <!-- 开放平台获取的APPID -->
    </intent-filter>
</activity>
<activity android:name="com.tencent.connect.common.AssistActivity"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:screenOrientation="portrait"/>

 

注意: 不需要很多的类库 全部下来只有三个文件 。一个类库和两个前台页面,你将类库放到AppCode下面。然后将账号绑定那一块注释掉就行了,或者将账号绑定部分换成你自己系统的。就可以了。程序报错可能是因为我在绑定账号那里用到了别的类,你注释掉就行了 ------------------------------------------------------------ 经过两天的努力 已经成功将QQ登录集成到了 城记网 上。感谢腾讯提供的帮助文档,和关键时刻给的技术支持。我的网站是asp.net写的,有需要的网友可以联系我。 呵呵。(尽管是垃圾站,只要你愿意,又有什么关系呢?) QQ Oauth 只提供PHP的接入demo ,针对 ASP.net 的只有一个网友开发的SDK包,下载地址还老打不开,后来我从CSDN上下载了一个,看了以后感觉太复杂了,我个人感觉做这么个小事情不需要搞个SDK出来,不如自己按帮助文档去写,这样自己写的方法灵活性就高一些,于是就按文档学习开发。其实文档写得很清晰,耐心一看就明白了。 不讲太多的郁闷的过程了,直接说解决办法。 办这个事情主要要知道下面几个事情。 两个重点(如下): 第一个重点:请求Token的步骤, 1:请求未授权的临时token。请求成功以后会转到QQ登录页面。 2:请求已授权的临时token。登陆成功以后获得。 3:请求已授权的Access token。 第二个重点:签名的算法。 签名的值计算有一个指定的规则,请参考腾讯开放社区帮助文档,这是最 好的资料。 注意点: 没有申请APPID和APPKEY的先去申请。 传递的每一参数都要URLENcode,注意是每一个,包括动态生成的签名。    参数之间是有顺序的,是升序排列的,无论有多少个,都要排序。    各个步骤之间是有关联的,下一步的提交往往需要上一步的返回参数。 我采取的文档结构: 总共三个文件 ,非常简单。 一个放在APPcode下面的类。用来发送请求和接待参数。 两个前台页面,主要是对类的调用。 下面把类的代码完全贴出,你知要一看见类,就知道怎么写前台页面了,很简单
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值