这里记录一下快速集成微信登陆,网上也有很多,但是我这个是记录一下自己做的流程。可以直接把代码拷贝使用一气呵成。
1、引入微信SDK依赖
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
2、申明应用权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2、向微信注册APP
这里首先要注册开发者帐号,取得APPID和AppSecret
public class MyApplication extends Application {
public static IWXAPI mWxApi;
@Override
public void onCreate() {
super.onCreate();
registerToWX();
}
private void registerToWX() {
//第二个参数是指你应用在微信开放平台上的AppID
mWxApi = WXAPIFactory.createWXAPI(this, MainConstant.WX.WEIXIN_APP_ID, false);
// 将该app注册到微信
mWxApi.registerApp(MainConstant.WX.WEIXIN_APP_ID);
}
}
2、请求微信授权登录
//先判断是否安装微信APP,按照微信的说法,目前移动应用上微信登录只提供原生的登录方式,需要用户安装微信客户端才能配合使用。
if (!WXUtils.isWXAppInstalled()) {
ToastUtils.showToast("您还未安装微信客户端");
return;
}
//微信登录
public void wxLogin() {
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "diandi_wx_login";
//像微信发送请求
MyApplication.mWxApi.sendReq(req);
}
这个方法会跳到微信的授权界面,进行授权。 这里也有个坑点 ,你的app的签名和开发者里面的要一样才行。
使用这个工具可以查看app的签名,资源地址: ![]{https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&token=d914a1d0def9667e020392cfd4462fe7bdd72db0&lang=zh_CN}
5、创建WXEntryActivity.java来接收微信的响应事件
- WXEntryActivity是一个Activity,用来接收微信的响应信息。这里有几个需要注意的地方:
- 它必须在"包名.wxapi"这个包下,如:你的应用包名为:com.xx.test,则WXEntryActivity所在的包名必须为com.xx.test.wxapi。这里和签名一样,很重要,你如果名字错了,或者包名的位置错了,都是不能回调的,切记
-创建后在AndroidManifest.xml文件中对WXEntryActivity进行设置:
<!--微信-->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
- WXEntryActivity的具体实现,主要是处理微信和app通信的不同event。
public class WXEntryActivity extends BaseActivity implements IWXAPIEventHandler {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//这句没有写,是不能执行回调的方法的
handleIntent(getIntent(), this);
}
public static boolean handleIntent(Intent intent, IWXAPIEventHandler var2) {
if (intent == null) {
return false;
}
return mWxApi.handleIntent(intent, var2);
}
// 微信发送请求到第三方应用时,会回调到该方法
@Override
public void onReq(BaseReq baseReq) {
}
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
//app发送消息给微信,处理返回消息的回调
@Override
public void onResp(BaseResp baseResp) {
int type = baseResp.getType(); //类型:分享还是登录
switch (baseResp.errCode) {
// 成功获得回调。
case BaseResp.ErrCode.ERR_OK:
//1。得到code
String code = ((SendAuth.Resp) baseResp).code;
//2。根据code得到token和openid
String Url = https://api.weixin.qq.com/sns/oauth2/access_token?appid=你的APPID&secret=你的SECRET&code=你的CODE&grant_type=authorization_code;
//3。根据tokent和openid取得微信的个人信息
String url="https://api.weixin.qq.com//sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";
//4。和服务器交互
}
}
}
网友评论