Android开发第三方登录 | 您所在的位置:网站首页 › android开发qq界面登录顶上 › Android开发第三方登录 |
QQ登录、微信登录,新浪微博登录资料获取demo下载 http://download.csdn.net/detail/pkandroid/9903796github地址 进入 https://github.com/HYVincent/Login项目有需求,需要使用微信登录,QQ登录看这里 Android端要使用微信登录,必须在微信开发平台创建APP并且审核通过 微博登录看这里 如图: 不包含统计功能的 dependencies { compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+' }微信登录LoginActivity.java public class LoginActivity extends BaseActivity implements ILoginView.View { ....... ......... /** * 微信登录相关 */ private IWXAPI api; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); ButterKnife.bind(this); hintTitle(); .... .......... //通过WXAPIFactory工厂获取IWXApI的示例 api = WXAPIFactory.createWXAPI(this,Config.APP_ID_WX,true); //将应用的appid注册到微信 api.registerApp(Config.APP_ID_WX); } ..... ........ @OnClick({R.id.login_tv_register, R.id.login_btn_go, R.id.login_tv_forget_password,R.id.iv_other_login_qq,R.id.iv_other_login_sina,R.id.iv_other_login_wx}) public void onViewClicked(View view) { switch (view.getId()) { ...... .......... /** snsapi_base属于基础接口,若应用已拥有其它scope权限,则默认拥有snsapi_base的权限。使用snsapi_base可以让移动端网页授权绕过跳转授权登录页请求用户授权的动作,直接跳转第三方网页带上授权临时票据(code),但会使得用户已授权作用域(scope)仅为snsapi_base,从而导致无法获取到需要用户授权才允许获得的数据和基础功能。 */ case R.id.iv_other_login_wx: SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo";// // req.scope = "snsapi_login";//提示 scope参数错误,或者没有scope权限 req.state = "wechat_sdk_微信登录"; api.sendReq(req); break; ....... } } .......... ........... }然后编写微信登录的回调页面:WXEntryActivity.java 在包名的目录下创建wxapi子包(必须,这个包名必须是配置清单的package值),比如我的包名是:com.vincent.colud.那么WXEntryActivity.java类完整路径就是com.vincent.colud.wxapi.WXEntryActivity, 另外需要注意的是,以上所有的操作都是在打正式签名证书的情况下使用 现在已经完成了微信登录的授权,然后开始微信个人资料的获取 —————————–2017年6月10日08:54:03——————————— 这是授权成功之后返回的数据,格式化之后如下: { "code":"0712DRee0kzwiz13fUce0900feRet", "country":"CN", "errCode":0, "lang":"zh_CN", "state":"wechat_sdk_微信登录", "type":1, "url":"wxb363a9ff53731258://oauth?code=0712DRee0kzwiz13fUce0900fe02DRet&ate=wechat_sdk_%E5%BE%AE%E4%BF%A1%E7%99%BB%E5%BD%95" } 解释: errCode: //ERR_OK = 0(用户同意) ERR_AUTH_DENIED = -4(用户拒绝授权 ERR_USER_CANCEL = -2(用户取消) code:用户换取access_token的code,仅在ErrCode为0时有效 state:第三方程序发送时用来标识其请求的唯一性的标志,由第三方程序调用sendReq时传入,由微信终端回传,state字符串长度不能超过1K lang:微信客户端当前语言 country:微信用户当前国家信息 现在来获取微信的access_token,获取地址是: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code 请求方式:GET参数说明: appid:应用唯一标识,在微信开放平台提交应用审核通过后获得 secret:应用密钥AppSecret,在微信开放平台提交应用审核通过后获得 code:填写第一步获取的code参数 grant_type:固定值,写authorization_code 获取WeiXin的Access_token OkHttpUtils.get().url("https://api.weixin.qq.com/sns/oauth2/access_token") .addParams("appid",Config.APP_ID_WX) .addParams("secret",Config.APP_SECRET_WX) .addParams("code",entity.getCode()) .addParams("grant_type","authorization_code") .build() .execute(new StringCallback() { @Override public void onError(okhttp3.Call call, Exception e, int id) { closeDialog(); } @Override public void onResponse(String response, int id) { ViseLog.d("response:"+response); } }); 响应数据: { "access_token":"hSTsG7nq8e0yEFhOZFT-wAdTsjT9jC0AYvGRiqGwwR6Hko99o_mmYR8KO18kMxeDOz33d9tnBhMzu_NLsIha2HqvTm1OGPL1weBdvXZVFFc", "expires_in":7200, "refresh_token":"AeN69M27vttqCedxoIOSeY6cxvbt1N584HjEOclUXtNWxRaZWgmtfvn2jWIDX4tq5t-7Btlc1UkEyyFhV7HVIMXe-V6RPjoZdF525vLzev8", "openid":"olmt4wfxS21G4VeeVX16_zUhZezY", "scope":"snsapi_userinfo", "unionid":"o5aWQwAa7niCIXhAIRBOwglIJ7UQ" }access_token:接口调用凭证 expires_in :access_token接口调用凭证超时时间,单位(秒) refresh_token 用户刷新access_token openid 授权用户唯一标识 scope 用户授权的作用域,使用逗号(,)分隔 刷新或续期access_token使用接口说明 access_token是调用授权关系接口的调用凭证,由于access_token有效期(目前为2个小时)较短,当access_token超时后,可以使用refresh_token进行刷新,access_token刷新结果有两种: 1.若access_token已超时,那么进行refresh_token会获取一个新的access_token,新的超时时间; 2.若access_token未超时,那么进行refresh_token不会改变access_token,但超时时间会刷新,相当于续期access_token。 refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权,所以,请开发者在refresh_token即将过期时(如第29天时),进行定时的自动刷新并保存好它。 请求方法 使用/sns/oauth2/access_token接口获取到的refresh_token进行以下接口调用: http请求方式: GET https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN 参数说明 参数 是否必须 说明 appid 是 应用唯一标识 grant_type 是 填refresh_token refresh_token 是 填写通过access_token获取到的refresh_token参数 上面的是从文档上直接复制的,刷新或续期access_token我暂时没有尝试 获取个人信息获取个人信息的接口如下: https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID 请求方式:GET参数就不说了,就那么样.. //https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID OkHttpUtils.get() .url("https://api.weixin.qq.com/sns/userinfo") .addParams("access_token",accessTokenEntity.getAccess_token()) .addParams("openid",accessTokenEntity.getOpenid())//openid:授权用户唯一标识 .build() .execute(new StringCallback() { @Override public void onError(okhttp3.Call call, Exception e, int id) { closeDialog(); } @Override public void onResponse(String response, int id) { ViseLog.d("userInfo:"+response); } }); 获取个人信息响应结果格式化如下: { "openid":"olmt4wfxS24VeeVX16_zUhZezY", "nickname":"李文星", "sex":1, "language":"zh_CN", "city":"Shenzhen", "province":"Guangdong", "country":"CN", "headimgurl":"http://wx.qlogo.cn/mmopen/ajNVdqHZLLDickRibe5D4x2ADgSfianmA4kK9hY4esrvGhmAFCe5wjox6b6pL4ibiblKnxibzVtGdqfa2UVHACfmmUsQ/0", "privilege":[ ], "unionid":"o5aWQwAa7niCIXhAIRBOwglIJ7UQ" }数据已经拿到了,微信登录完成..有问题可留言.. |
CopyRight 2018-2019 实验室设备网 版权所有 |