第三方授权登陆(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>
<application>
4.创建实例:
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; } }
相关文章推荐
- android QQ第三方登陆 错误 登陆授权失败(错误码:110406)
- Android第三方登陆之QQ篇(原生登陆授权)
- ios 第三方qq登陆,号码禁止授权
- ios 第三方qq授权登陆,第一次登陆后,再次登陆,失效
- ios 第三方qq授权登陆,第一次登陆后,再次登陆,失效
- 友盟QQ第三方授权登陆(精简)
- ios 第三方qq登陆,号码禁止授权
- 第三方APP微信登陆时无法调起授权页面的终极坑
- AndroidQQ第三方登陆
- 【android】第三方集成之——QQ登录,微博登陆
- php使用qq第三方登陆(oauth协议)
- QQ第三方授权登录(带详细源码)
- 新浪微博 & QQ登录 登陆授权 V1.0
- 基于第三方QQ授权登录和新浪微博授权登录的iOS代码分析
- 使用第三方APPKey授权 跳转登录 QQ
- 淘宝账号基于OAuth2.0的登录验证授权登陆第三方网站
- 【用户授权设计】java第三方登录(微博,QQ)详细代码
- Android开发全程记录(四)——使用QQ登陆第三方应用
- 微博,qq第三方登陆 绑定--注意点
- 制作一个类似QQ第三方登陆的sdk平台(安卓版)