第三方授权登陆(QQ)

第三方授权登陆(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;
	}
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值