Android第三方绑定微信登录详解
2016-12-30 10:01
375 查看
微信登录官方文档地址:点击进入
一、准备工作
在进行微信登录之前,首先要在微信开放平台注册开发者账号,并拥有一个已审核通过的移动应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。
微信开放平台接入地址:点击进入
创建移动应用后获得相应的AppID 和 AppSecret
二、授权流程说明
官方文档如下:
1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
时序图如下:
下面进行代码演示。
在要进行微信登录的Activity里面发起微信登录请求。
在onCreate里面初始化IWXAPI
发起登陆的代码(当点击微信登录按钮后执行这段代码)
当这段代码执行完毕后,就会发起微信登录授权页面,等待用户授权登录。
授权成功后,SDK通过SendAuth的Resp返回数据给调用方(即我们自己的APP),此时要在WXEntryActivity中的public void onResp(BaseResp resp)方法中进行数据处理(微信、朋友圈分享成功后,此方法同样被调用)。
微信登录的返回值如下:
代码处理如下:
特别注意!!!
WXEntryActivity 这个类的包名不能乱写!
在你的工程包名相应目录下新建一个wxapi目录,并把WXEntryActivity 这个类放在该目录下,AndroidManifest中,WXEntryActivity 的name一定要写成下面的形式!
android:name="包名.wxapi.WXEntryActivity"
一、准备工作
在进行微信登录之前,首先要在微信开放平台注册开发者账号,并拥有一个已审核通过的移动应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。
微信开放平台接入地址:点击进入
创建移动应用后获得相应的AppID 和 AppSecret
二、授权流程说明
官方文档如下:
1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
时序图如下:
下面进行代码演示。
在要进行微信登录的Activity里面发起微信登录请求。
在onCreate里面初始化IWXAPI
public static final String APP_ID="wx798XXXXXXXXX";//(这个APP_ID为在微信开放平台创建应用后获得的ID) private IWXAPI api;//要导入微信相关包 @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); api=WXAPIFactory.createWXAPI(this, APP_ID,true); api.registerApp(APP_ID); }
发起登陆的代码(当点击微信登录按钮后执行这段代码)
{ SendAuth.Req req=new SendAuth.Req(); req.scope="snsapi_userinfo"; req.state="wechat_sdk_demo_test"; api.sendReq(req); }
当这段代码执行完毕后,就会发起微信登录授权页面,等待用户授权登录。
授权成功后,SDK通过SendAuth的Resp返回数据给调用方(即我们自己的APP),此时要在WXEntryActivity中的public void onResp(BaseResp resp)方法中进行数据处理(微信、朋友圈分享成功后,此方法同样被调用)。
微信登录的返回值如下:
代码处理如下:
public class WXEntryActivity extends Activity implements IWXAPIEventHandler{ String access_token; Long expires_in; String refreshToken; String openid; private IWXAPI api; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); api=WXAPIFactory.createWXAPI(this, ContentsInfo.APP_ID, false); api.handleIntent(getIntent(),this); } @Override protected void onNewIntent(Intent intent){ super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent,this); } //在这个方法里面进行结果处理,获得CODE(微信登录,微信分享,微信朋友圈分享都会调用这个方法) @Override public void onResp(BaseResp resp){ switch(resp.errCode){ case BaseResp.ErrCode.ERR_OK: //返回成功,判断是哪种类型(如果不进行判断,当微信登录和微信分享同时存在的话,会出现异常) switch(resp.getType()){ case ConstantsAPI.COMMAND_SENDAUTH: //登录回调,获得CODE String code=((SendAuth.resp)resp).code; //通过code获得access_token getAccess_token(code); break; case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX: //微信分享回调 break; } break; case BaseResp.ErrCode.ERR_USER_CANCEL: //用户取消 break; case BaseResp.ErrCode.ERR_AUTH_DENIED: //用户拒绝授权 break; } } //通过得到的CODE获取access_token void getAccess_token(String code){ AjaxParams params=new AjaxParams(); params.put("appid", ContentsInfo.APP_ID); params.put("secret", ContentsInfo.APP_SECRET); params.put("code", code); params.put("grant_type", "authorization_code"); String url="https://api.weixin.qq.com/sns/oauth2/access_token"; ApiClientUtil.getInstance().Post(url, params, new AjaxCallBack<Object>() { @Override public void onSuccess(Object t) { super.onSuccess(t); try { JSONObject resObj=new JSONObject(t.toString()); //得到openid和access_token,调用接口登录 access_token=resObj.getString("access_token"); openid=resObj.getString("openid"); refreshToken=resObj.getString("refresh_token"); expires_in=resObj.getLong("expires_in"); getUserInfo(); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } //通过access_token调用接口 void getUserInfo(){ if(isAccessTokenIsInvalid() && System.currentTimeMillis() < expires_in){ String url="https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid; HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(URI.create(uri)); try { HttpResponse response = client.execute(get); if (response.getStatusLine().getStatusCode() == 200) { BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); StringBuilder builder = new StringBuilder(); for (String temp = reader.readLine(); temp != null; temp = reader.readLine()) { builder.append(temp); } JSONObject object = new JSONObject(builder.toString().trim()); String nikeName = object.getString("nickname"); } } catch (Exception e) { e.printStackTrace(); } } } }
特别注意!!!
WXEntryActivity 这个类的包名不能乱写!
在你的工程包名相应目录下新建一个wxapi目录,并把WXEntryActivity 这个类放在该目录下,AndroidManifest中,WXEntryActivity 的name一定要写成下面的形式!
android:name="包名.wxapi.WXEntryActivity"
相关文章推荐
- Android 微信第三方绑定登录详解
- Android使用友盟集成QQ、微信、微博等第三方分享与登录方法详解
- 【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料
- android 第三方微信登录
- android集成第三方微信登录
- android接入原生第三方登录(微信登录、QQ登录、新浪微博登录)
- 【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料
- 【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料
- 微信第三方登录Android实现
- 微信第三方登录Android注意事项
- android接入原生第三方登录(微信登录、QQ登录、新浪微博登录)
- 微信第三方授权登录之Android app应用
- android第三方(qq、微信、微博)登录和分享
- Android第三方登录详解1
- 【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料
- android第三方登录之微信登录详情
- Android 微信第三方App登录
- 微信公众号-微信服务号与第三方登录的用户一致吗:绑定后一致
- 【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料
- Android第三方登录详解2