前提:微信授权登录接入需要先到微信开放平台申请好应用的APPID。
接入的两种方式
- 微信SDK接入:使用微信官方SDK接入,需要分“获取code票据”和“获取access_token”两步来获得授权关系接口的调用凭证
- 友盟SDK接入:友盟已集成各种接口接入,直接一个方法搞定
ps:
- 如果App中只有微信第三方,推荐是使用微信SDK接入,简单,易粘贴。
- 如果有QQ、微信、支付宝等等一种以上的第三方推荐使用友盟SDK接入。
通俗易懂的讲就是友盟包含着很多三方,只需要申请一个友盟账号即可。微信只能微信登录,其它的你还得申请其它平台的账号。
微信SDK接入
这篇文章记录的是微信SDK接入实现微信登录并获取用户信息用SharedPreferences把信息保存在本地的代码。
我复制的是这两位大佬的博客。在此附上链接。Teck12、LMYU阿雨
我只是把这两位大佬写的结合了一下。
第一步:build.gradle 文件中,添加如下依赖
api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
第二步:清单文件中添加微信登录所需的权限
<uses-permission android:name="android.permission.INTERNET" />
<!-- for mta statistics, not necessary-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
第三步:APP_ID最好是存放在我们的变量类是方便我们调用,做微信其他功能时也方便使用
public class ApiConstant{
public static final String APP_ID = "微信开放平台申请好应用的APPID";
public static final String APP_SECRET = "微信开放平台申请好应用的APPSECRET";
public static IWXAPI wx_api;
}
第四步:初始化操作,一般放在Application里
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 通过WXAPIFactory工厂,获取IWXAPI的实例
ApiConstant.wx_api = WXAPIFactory.createWXAPI(getApplicationContext(), Constants.APP_ID, true);
// 将应用的appId注册到微信
ApiConstant.wx_api.registerApp(Constants.APP_ID);
}
第五步:接下来到我们点击登录了,当我们登录时我们的我们的第三方app端会带着我们的APP_ID、包名、签名信息去到微信客户端,微信客户端会带着这些信息去到微信服务器校验注册时的信息,校验成功通知微信客户端唤起微信授权页。
//发送请求唤起收起授权页
public void wxLogin() {
if (!ApiConstant.wx_api.isWXAppInstalled()) {
ToastUtils.show( "您的设备未安装微信客户端");
} else {
final SendAuth.Req req = new SendAuth.Req();
//应用授权作用域,如获取用户个人信息则填写 snsapi_userinfo
req.scope = "snsapi_userinfo";
//用于保持请求和回调的状态,授权请求后原样带回给第三方。
//该参数可用于防止 csrf 攻击(跨站请求伪造攻击),
//建议第三方带上该参数,可设置为简单的随机数加 session 进行校验
req.state = "wechat_sdk_demo_test";
ApiConstant.wx_api.sendReq(req);
}
}
第六步:我们要创建微信回调类接收登录授权页登陆状态,在你的包下创建包名为:wxapi、类名为:WXEntryActivity,!包名类名必须相同,实现IWXAPIEventHandle从写onReq、onResp方法,在onResp方法中处理回调信息
public class WXEntryActivity extends Activity implements IWXAPIEventHandler{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override