您的位置:首页 > 其它

第三方授权登陆(QQ)

2017-03-04 11:58 1126 查看
第三方授权登陆(QQ)
QQ授权:
1.下载SDK:QQ互联SDK官网,注册开发者,创建应用,等待审核通过,获取appid;(测试用的appid为:tencent222222);

***备注:在QQ互联填写APP信息时,最多可以填写6组包名和签名,便于在测试和正式发布的时候都可以使用。签名是根据打包APK时的签名文件不同,用官网提供的签名生成工具生成的。

2.创建工程,将open_sdk.jar 导入工程;

3.配置AndroidManifest.xml:

<uses-permissionandroid:name="android.permission.INTERNET"/>

<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>

 

<application>

<activity

      android:name="com.tencent.tauth.AuthActivity"

      android:noHistory="true"

      android:launchMode="singleTask">

    <intent-filter>

          <actionandroid:name="android.intent.action.VIEW"/>

          <categoryandroid:name="android.intent.category.DEFAULT"/>

          <categoryandroid:name="android.intent.category.BROWSABLE"/>

          <dataandroid:scheme="tencent你的AppId"/>

    </intent-filter>

</activity>

<activity android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"
/>


<application>

4.创建实例:

import org.json.JSONObject;

import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.secrui.activity.BaseActivity;
import com.secrui.smarthome.R;
import com.tencent.connect.common.Constants;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;

public class LoginActivity extends BaseActivity implements OnClickListener {

private Button btn_qq_login;

private Tencent mTencent;
private UserInfo mInfo;
private IUiListener loginListener;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
btn_qq_login = (Button) findViewById(R.id.btn_qq_login);
btn_qq_login.setOnClickListener(this);
loginListener = new BaseUIListener();
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_qq_login:
mTencent = Tencent.createInstance("tencent123456789", getApplicationContext());
/**通过这句代码,SDK实现了QQ的登录,这个方法有三个参数,第一个参数是context上下文,第二个参数SCOPO 是一个String类型的字符串,表示一些权限
官方文档中的说明:应用需要获得哪些API的权限,由“,”分隔。例如:SCOPE = “get_user_info,add_topic”;所有权限用“all”
第三个参数,是一个事件监听器,IUiListener接口的实例,这里用的是该接口的实现类 */
//			if (!mTencent.isSessionValid()) {
mTencent.login(LoginActivity.this, "all", loginListener);
//			}
break;
}
}

/**QQ登录回调*/
private class BaseUIListener implements IUiListener{

@Override
public void onCancel() {

}

@Override
public void onComplete(Object response) {
/**  在登录成功后会调用onComplete回调,返回类似下面格式的JSONObject对象
{
"ret":0,   //表示登录成功
"pay_token":"xxxxxxxxxxxxxxxx",
"pf":"openmobile_android",
"expires_in":"7776000",
"openid":"xxxxxxxxxxxxxxxxxxx",
"pfkey":"xxxxxxxxxxxxxxxxxxx",
"msg":"sucess",
"access_token":"xxxxxxxxxxxxxxxxxxxxx"
}
*/
if (null == response || ((JSONObject) response).length() == 0) {
ToastUtils.showShort(LoginActivity.this, R.string.loginfail);
return;
}
try {
JSONObject jsonResponse = (JSONObject) response;
String token = jsonResponse.getString(Constants.PARAM_ACCESS_TOKEN);
String expires = jsonResponse.getString(Constants.PARAM_EXPIRES_IN);
String openId = jsonResponse.getString(Constants.PARAM_OPEN_ID);
if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)
&& !TextUtils.isEmpty(openId)) {
mTencent.setAccessToken(token, expires);
mTencent.setOpenId(openId);
//可以进一步获取信息
mInfo = new UserInfo(this, mTencent.getQQToken());
mInfo.getUserInfo(listener);
}

} catch(Exception e) {
e.printStackTrace();
}
}

@Override
public void onError(UiError arg0) {
Log.e("TAG_qqLOGIN", "error = "+arg0);
}
}

/*
返回类似下面的JSON数据
{
"is_yellow_year_vip": "0",
"ret": 0,
"figureurl_qq_1":
"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/40",
"figureurl_qq_2":
"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
"nickname": "小罗",
"yellow_vip_level": "0",
"msg": "",
"figureurl_1":
"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/50",
"vip": "0",
"level": "0",
"figureurl_2":
"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
"is_yellow_vip": "0",
"gender": "男",
"figureurl":
"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/30"
}
*/
IUiListener listener = new IUiListener() {

@Override
public void onError(UiError e) {

}

@Override
public void onComplete(final Object response) {
Message msg = new Message();
msg.obj = response;
msg.what = 0;
mHandler.sendMessage(msg);
new Thread(){

@Override
public void run() {
JSONObject json = (JSONObject)response;
if(json.has("figureurl")){
Bitmap bitmap = null;
try {
bitmap = getbitmap(json.getString("figureurl_qq_2"));
} catch (JSONException e) {

}
Message msg = new Message();
msg.obj = bitmap;
msg.what = 1;
mHandler.sendMessage(msg);
}
}

}.start();
}

@Override
public void onCancel() {

}
};

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Constants.REQUEST_LOGIN ||
requestCode == Constants.REQUEST_APPBAR) {
Tencent.onActivityResultData(requestCode,resultCode,data,loginListener);
}
super.onActivityResult(requestCode, resultCode, data);
}

/**
* 根据一个网络连接(String)获取bitmap图像
*
* @param imageUri
* @return
* @throws MalformedURLException
*/
public Bitmap getbitmap(String imageUri) {
Log.v(TAG, "getbitmap:" + imageUri);
// 显示网络上的图片
Bitmap bitmap = null;
try {
URL myFileUrl = new URL(imageUri);
HttpURLConnection conn = (HttpURLConnection) myFileUrl
.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();

Log.v(TAG, "image download finished." + imageUri);
} catch (OutOfMemoryError e) {
e.printStackTrace();
bitmap = null;
} catch (IOException e) {
e.printStackTrace();
Log.v(TAG, "getbitmap bmp fail---");
bitmap = null;
}
return bitmap;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  QQ授权登陆