build.gradle 添加依赖
api 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.0'
绑定证书
signingConfigs {
release {
keyAlias '证书别名'
keyPassword '密码'
storeFile file('证书所在路径')
storePassword '密码'
}
debug {
keyAlias '证书别名'
keyPassword '密码'
storeFile file('证书所在路径')
storePassword '密码'
}
}
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"/>
<queries>
<!--指定微信包名-->
<package android:name="com.tencent.mm" />
</queries>
在app 的 添加
public IWXAPI mWxApi;
private static String APP_ID = "应用appId";
private void registToWX() {
Log.d("微信注册------->","");
//AppConst.WEIXIN.APP_ID是指你应用在微信开放平台上的AppID,记得替换。
mWxApi = WXAPIFactory.createWXAPI(this, APP_ID, true);
// 将该app注册到微信
mWxApi.registerApp(APP_ID);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// 将该app注册到微信
boolean registerApp = mWxApi.registerApp(APP_ID);
Log.d("registerAppCode------->",registerApp+"");
}
}, new IntentFilter(ConstantsAPI.ACTION_REFRESH_WXAPP));
}
public void wxLogin() {
if (!mWxApi.isWXAppInstalled()) {
showToast("您还未安装微信客户端");
return;
}
final SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "diandi_wx_login";
mWxApi.sendReq(req);
}
/**
* 显示Toast
*
* @param message
*/
public void showToast(String message) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
在onCreate方法注册app到微信
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.registToWX();
}
添加事件 调用 wxLogin 唤起微信(新增 WXEntryActivity)
新增 WXEntryActivity
注意:必须是包路径下新增文件夹 wxapi 下 创建 (例如: 包路 径:com.demo.shop 在 com.demo.shop.wxapi 下创建 WXEntryActivity )
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import androidx.annotation.Nullable;
import com.ecwhale.MainActivity;
import com.ecwhale.R;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private static final int RETURN_MSG_TYPE_LOGIN = 1;
private static final int RETURN_MSG_TYPE_SHARE = 2;
public static IWXAPI mWxApi;
private static String APP_ID = "项目appID";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("APP_ID------>", APP_ID);
//如果没回调onResp,八成是这句没有写
mWxApi = WXAPIFactory.createWXAPI(this, APP_ID, true);
mWxApi.handleIntent(getIntent(), this);
}
// 微信发送请求到第三方应用时,会回调到该方法
@Override
public void onReq(BaseReq req) {
}
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
//app发送消息给微信,处理返回消息的回调
@Override
public void onResp(BaseResp resp) {
Log.d("onResp: ", resp.errStr);
Log.d("错误码 : ", resp.errCode + "");
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_AUTH_DENIED:
case BaseResp.ErrCode.ERR_USER_CANCEL:
if (RETURN_MSG_TYPE_SHARE == resp.getType()) showToast("分享失败");
else showToast("登录失败");
break;
case BaseResp.ErrCode.ERR_OK:
switch (resp.getType()) {
case RETURN_MSG_TYPE_LOGIN:
//拿到了微信返回的code,立马再去请求access_token
String code = ((SendAuth.Resp) resp).code;
Log.d("code : ", code + "");
//就在这个地方,用网络库什么的或者自己封的网络api,发请求去咯,注意是get请求
break;
case RETURN_MSG_TYPE_SHARE:
showToast("微信分享成功");
finish();
break;
}
break;
}
}
public void showToast(String message) {
Toast.makeText(this.getApplication(), message, Toast.LENGTH_SHORT).show();
}
}
程序报错 MicroMsg.SDK.WXApiImplV10: handleIntent fail, ex = println needs a message
WXEntryActivity 报错代码修改
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import androidx.annotation.Nullable;
import com.ecwhale.MainActivity;
import com.ecwhale.R;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private static final int RETURN_MSG_TYPE_LOGIN = 1;
private static final int RETURN_MSG_TYPE_SHARE = 2;
public static IWXAPI mWxApi;
private static String APP_ID = "";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
APP_ID = getResources().getString(R.string.app_id);
Log.d("APP_ID------>", APP_ID);
//如果没回调onResp,八成是这句没有写
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
int errCode = bundle.getInt("_wxapi_baseresp_errcode");
if (errCode == 0) {
final String code = bundle.getString("_wxapi_sendauth_resp_token");
if (code != null) {
// 利用这个code来继续登录流程
Log.d("code : ", code + "");
}
}
}
}
// 微信发送请求到第三方应用时,会回调到该方法
@Override
public void onReq(BaseReq req) {
}
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
//app发送消息给微信,处理返回消息的回调
@Override
public void onResp(BaseResp resp) {
Log.d("onResp: ", resp.errStr);
Log.d("错误码 : ", resp.errCode + "");
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_AUTH_DENIED:
case BaseResp.ErrCode.ERR_USER_CANCEL:
if (RETURN_MSG_TYPE_SHARE == resp.getType()) showToast("分享失败");
else showToast("登录失败");
break;
case BaseResp.ErrCode.ERR_OK:
switch (resp.getType()) {
case RETURN_MSG_TYPE_LOGIN:
//拿到了微信返回的code,立马再去请求access_token
String code = ((SendAuth.Resp) resp).code;
Log.d("code : ", code + "");
//就在这个地方,用网络库什么的或者自己封的网络api,发请求去咯,注意是get请求
break;
case RETURN_MSG_TYPE_SHARE:
showToast("微信分享成功");
finish();
break;
}
break;
}
}
public void showToast(String message) {
Toast.makeText(this.getApplication(), message, Toast.LENGTH_SHORT).show();
}
}