您的位置:首页 > 其它

第一次的博客-------------第三方应用QQ登录

2016-12-15 15:48 453 查看
写在开头:

小白一枚,第一次写博客,之前一直在阅读文章的时候,看到很多大神们都推荐多多写博客。

现在无聊之余也写一写,当做知识的整理。

开始--------第三方应用使用QQ登录

1、首先,写到腾讯开放平台创建一个应用(怎么创建这里略过



创建后拿到一个 APP ID ,写保存着,之后会用到


2、平台上下载SDK,把 mta-sdk-1.6.2.jar
与 open_sdk_r5756.jar 都导入项目中(官方文档说明分全量包包、基础包

,这个我咋不是很清楚,所以直接全部导进去)。

3、配置AndroidManifest,在应用的AndroidManifest.xml增加配置的<application>节点下增加以下配置(注:不配置将会导致无法调用API);

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application>
<activity
android:name="com.tencent.tauth.AuthActivity"
android:noHistory="true"
android:launchMode="singleTask" >
<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="tencent你的AppId" /> -->
<data android:scheme="1105870190" />
</intent-filter>
</activity>
<activity android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"
/>
<application>配置相应的权限,特别注意的是
<data android:scheme="tencent你的AppId" />
这里写的是上面自己创建应用拿到的 APP ID ,官网上说要在前面加tencent,即tencentAPP ID,扯淡

,为这个我还郁闷的一阵,直接写APP ID就好。
4、Tencent是SDK的功能入口,所有的接口调用都得通过Tencent进行调用。因此,调用SDK,首先需要创建一个Tencent实例,其代码如下:
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。
// 其中APP_ID是分配给第三方应用的appid,类型为String。
Tencent mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());
// 1.4版本:此处需新增参数,传入应用程序的全局context,可通过activity的getApplicationContext方法获取
// 初始化视图
initViews();
}

5、实现登录并获取用户信息
需要先实现IUiListener的回调,
private class BaseUiListener implements IUiListener {

@Override
public void onComplete(Object response) {
if (null == response) {
ToastTool.showShortMsg(act,"登录失败");
return;
}
JSONObject jsonResponse = (JSONObject) response;
if (null != jsonResponse && jsonResponse.length() == 0) {
ToastTool.showShortMsg(act,"登录失败");
return;
}
ToastTool.showShortMsg(act,"登录成功");
doComplete((JSONObject)response);
}

protected void doComplete(JSONObject values) {

}

@Override
public void onError(UiError e) {
Logger.e("onError: " + e.errorDetail);
}

@Override
public void onCancel() {
Logger.e("onCancel: ");
ToastTool.showShortMsg(act,"取消授权");
}
}

然后是登录
if (!mTencent.isSessionValid())
{
mTencent.login(activity,"all",loginListener);
}第二个参数是 Scope ,现在还不知道是上面鬼,查看下资料直接写 all 


接下来是loginListener:
IUiListener loginListener = new BaseUiListener() {
@Override
protected void doComplete(JSONObject values) {
initOpenidAndToken(values);
//获取用户信息
updateUserInfo();
}
};

initOpenidAndToken(values):

public static void initOpenidAndToken(JSONObject jsonObject) {
try {
String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);
String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);
String openId = jsonObject.getString(Constants.PARAM_OPEN_ID);
if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)
&& !TextUtils.isEmpty(openId)) {
mTencent.setAccessToken(token, expires);
mTencent.setOpenId(openId);
}
} catch(Exception e) {
}
}

获取用户的信息updataUserInfo:
//QQ账号信息
private void updateUserInfo() {
if (mTencent != null && mTencent.isSessionValid()) {
IUiListener listener = new IUiListener() {

@Override
public void onComplete(Object response) {
//response,返回的用户数据
Logger.e("response----"+response.toString());

@Override
public void onError(UiError uiError) {

}

@Override
public void onCancel() {

}
};
mInfo = new UserInfo(this, mTencent.getQQToken());
mInfo.getUserInfo(listener);
}
}

这就差不多了,前前后后自己一个人也折腾了挺久的,不过总算搞出来了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息