Android 微信登陆实现
程序员文章站
2022-06-24 09:51:46
1.首先我们应该先去微信开放平台(https://open.weixin.qq.com)填写应用信息,提交审核2.审核完成微信开放平台会生成一个appid,和sercet,拿到之后请妥善保管按照微信开放平台给的文档,下载相应的sdk以及签名工具,在此强调 必须是用签名打包的正式版的apk才可以调起微信的客户端进行授权登录,必须保证应用的签名(用签名工具可以获取)和开放平台上填写的信息一致。4.开始代码模块在app级别的build.gradle里面添加依赖 //微信 ....
1.首先我们应该先去微信开放平台(https://open.weixin.qq.com)填写应用信息,提交审核
2.审核完成微信开放平台会生成一个appid,和sercet,拿到之后请妥善保管
- 按照微信开放平台给的文档,下载相应的sdk以及签名工具,在此强调 必须是用签名打包的正式版的apk才可以调起微信的客户端进行授权登录,必须保证应用的签名(用签名工具可以获取)和开放平台上填写的信息一致。
4.开始代码模块
在app级别的build.gradle里面添加依赖
//微信
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
android{
defaultConfig{
//微信登陆
signingConfigs {
release {
storeFile file('health.keystore')
keyAlias "health"
storePassword "123456"
keyPassword "123456"
}
debug {
storeFile file('health.keystore')
keyAlias "health"
storePassword "123456"
keyPassword "123456"
}
}
}
buildTypes {
release {
minifyEnabled true
zipAlignEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.debug
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
}
5.建一个包 名字叫wxapi(必须一致) 在这个包里创建一个类,WXEntryActivity(一致)
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
private static final int RETURN_MSG_TYPE_LOGIN = 1;
private String code;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrescoApp.mWxApi.handleIntent(getIntent(),this);
}
@Override
public void onReq(BaseReq baseReq) {
}
@Override
public void onResp(BaseResp baseResp) {
//登录回调
switch (baseResp.errCode){
case BaseResp.ErrCode.ERR_OK:
switch (baseResp.getType()){
case RETURN_MSG_TYPE_LOGIN:
//拿到了微信返回的code,立马再去请求access_token
code = ((SendAuth.Resp)baseResp).code;
if (TextUtils.isEmpty(code)){
code =getIntent().getStringExtra("_wxapi_sendauth_resp_token");
}
Log.i("wx_code", code);
//Toast.makeText(this, "登陆成功", Toast.LENGTH_SHORT).show();
//就在这个地方,用网络库什么的或者自己封的网络api,发请求去咯,注意是get请求
Intent intent = new Intent(this, LoginActivity.class);
intent.putExtra("code",code);
startActivity(intent);
finish();
break;
}
break;
}
}
}
6.在AndroidManifest.xml注册:
<activity android:name=".wxapi.WXEntryActivity"
android:exported="true"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="wxe3fcbe8a55cd33ff" />
</intent-filter>
</activity>
7.在App里面 //别忘了在清单文件里面也初始化App
public class FrescoApp extends Application {
public static FrescoApp context;
public static IWXAPI mWxApi;
@Override
public void onCreate() {
super.onCreate();
context = this;
Fresco.initialize(this);
registerTowX();
}
private void registerTowX() {
//AppConst.WEIXIN.APP_ID是指你应用在微信开放平台上的AppID,记得替换。
mWxApi = WXAPIFactory.createWXAPI(this, "wxe3fcbe8a55cd33ff", true);
// 将该app注册到微信
mWxApi.registerApp("wxe3fcbe8a55cd33ff");
}
//app
public static FrescoApp getApp(){
return context;
}
}
8.一定别忘了拿到传过来的code值
public class LoginActivity extends AppCompatActivity {
private Imageview wechat_pay;
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
wechat_pay = findViewById(wechat_pay);
//微信登陆
wechat_pay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!FrescoApp.mWxApi.isWXAppInstalled()){
Toast.makeText(LoginActivity.this, "您还未安装微信客户端", Toast.LENGTH_SHORT).show();
return;
}
final SendAuth.Req req = new SendAuth.Req();
req.scope="snsapi_userinfo";
req.state="diandi_wx_login";
FrescoApp.mWxApi.sendReq(req);
Intent intent = getIntent();
String code = intent.getStringExtra("code");
RetrofitUtils.getInstance().getWechatlogin(code, new Observer<WeChatLoginBean>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(WeChatLoginBean value) {
if (value.getStatus().equals("0000")){
Toast.makeText(LoginActivity.this, value.getMessage(), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(LoginActivity.this, Login2Activity.class);
startActivity(intent);
finish();
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
});
}
}
写到这,微信登陆就完成了!!!!
最后 喜欢的话 就点个赞吧!!!
本文地址:https://blog.csdn.net/weixin_50051845/article/details/112231794
上一篇: js实现验证码案例