1.在build.gradle文件中,添加如下依赖即可:
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
AndroidManifest.xml 设置,添加必要的权限支持:
<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"/>
3.4 在代码中使用
3.4.1 在界面上增加一个Button按钮,方便模拟登陆发起
新增一个Constants .java文件用于记录全局的常量
public class Constants {
public static final String APP_ID = "wxxxxxxx"; //替换为申请到的app id
public static IWXAPI wx_api; //全局的微信api对象
}
这里的wxxxxxxx是app id例如:wx4c96b6b8da494224
这个时候需要将下载好的东西放到app下
并且还需要加入依赖
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
signingConfigs { //在android代码块下写
debug {//这个地方可以写成 release
storeFile file('tech.keystore')
keyAlias "tech"
storePassword "123456"
keyPassword "123456"
}
}
}
在defaultConfig他下面加入
defaultConfig {
applicationId "com.wd.tech"
minSdkVersion 16
targetSdkVersion 29
versionCode 1
versionName "1.0"
multiDexEnabled true
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath = true
}
}
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
登录界面ctivity.java中的内容如下
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建微信api并注册到微信
Constants.wx_api = WXAPIFactory.createWXAPI(MainActivity.this, Constants.APP_ID, true);
Constants.wx_api.registerApp(Constants.APP_ID);
Button btn = (Button)findViewById(R.id.button1);//得到按钮
btn.setOnClickListener(new OnClickListener() { //注册按钮点击事件
@Override
public void onClick(View v) {
//发起登录请求
final SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_sdk_demo_test";
Constants.wx_api.sendReq(req);
}
});
}
}
这时候就可以发起微信登录了,但是要得到微信的返回结果,还需要下面的步骤
1.新建WXEntryActivity.java
在包名下面创建wxapi的包,并在wxapi的包中创建WXEntryActivity继承Activity,实现IWXAPIEventHandler接口,最后在Manifest中设置Activity的exported属性为true。这条很重要,如果不是”包名.wxapi.WXEntryActivity”的路径,就获取不到返回值。
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Constants.wx_api.handleIntent(getIntent(), this);
}
//微信请求相应
@Override
public void onReq(BaseReq baseReq) {
}
//发送到微信请求的响应结果
@Override
public void onResp(BaseResp resp) {
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
Log.i("WXTest","onResp OK");
if(resp instanceof SendAuth.Resp){
SendAuth.Resp newResp = (SendAuth.Resp) resp;
//获取微信传回的code
String code = newResp.code;
Log.i("WXTest","onResp code = "+code);
}
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
Log.i("WXTest","onResp ERR_USER_CANCEL ");
//发送取消
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
Log.i("WXTest","onResp ERR_AUTH_DENIED");
//发送被拒绝
break;
default:
Log.i("WXTest","onResp default errCode " + resp.errCode);
//发送返回
break;
}
finish();
}
}
在AndroidManifest.xml中对WXEntryActivity进行配置
<activity
android:exported="true"
android:name=".wxapi.WXEntryActivity"
android:launchMode="singleTop"
android:theme="@android:style/Theme.NoDisplay"/>
一定要记得去网络工具类加入ak
.addHeader("ak","0110010010000")
最后在WXEntryActivity 下面记得网络请求
String sessionId = wxBean.getResult().getSessionId();
int userId = wxBean.getResult().getUserId();
SharedPreferences user = getSharedPreferences("user", MODE_PRIVATE);
SharedPreferences.Editor edit = user.edit();
edit.putString("sessionId",sessionId)
.putInt("userId",userId)
.commit();
Toast.makeText(WXEntryActivity.this, wxBean.getMessage(), Toast.LENGTH_SHORT).show();