Android 微信登录实现

准备工作:

1、微信开发平台注册一个App,获取到APP_ID。

2、在Android Studio生成签名文件。

3、微信登录api和bean类

api:

public interface LoginApiService {    
    @FormUrlEncoded    
    @POST("url/login")    
    Observable<WeChatLoginBean> wxLogin(@Field("code") String code);
}

bean类:

public class WeChatLoginBean {

    private ResultBean result;
    private String message;
    private String status;

    public ResultBean getResult() {
        return result;
    }

    public void setResult(ResultBean result) {
        this.result = result;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public static class ResultBean {
        private int attentionSum;
        private int bankCardBindingStatus;
        private String constellation;
        private int fanSum;
        private int followWeChat;
        private String headPic;
        private int newUserFlag;
        private String nickName;
        private String personalImage;
        private String sessionId;
        private int sex;
        private String signature;
        private int userId;
        private int verifiedStatus;
        private int workSum;
        private List<?> userLabelList;

        public int getAttentionSum() {
            return attentionSum;
        }

        public void setAttentionSum(int attentionSum) {
            this.attentionSum = attentionSum;
        }

        public int getBankCardBindingStatus() {
            return bankCardBindingStatus;
        }

        public void setBankCardBindingStatus(int bankCardBindingStatus) {
            this.bankCardBindingStatus = bankCardBindingStatus;
        }

        public String getConstellation() {
            return constellation;
        }

        public void setConstellation(String constellation) {
            this.constellation = constellation;
        }

        public int getFanSum() {
            return fanSum;
        }

        public void setFanSum(int fanSum) {
            this.fanSum = fanSum;
        }

        public int getFollowWeChat() {
            return followWeChat;
        }

        public void setFollowWeChat(int followWeChat) {
            this.followWeChat = followWeChat;
        }

        public String getHeadPic() {
            return headPic;
        }

        public void setHeadPic(String headPic) {
            this.headPic = headPic;
        }

        public int getNewUserFlag() {
            return newUserFlag;
        }

        public void setNewUserFlag(int newUserFlag) {
            this.newUserFlag = newUserFlag;
        }

        public String getNickName() {
            return nickName;
        }

        public void setNickName(String nickName) {
            this.nickName = nickName;
        }

        public String getPersonalImage() {
            return personalImage;
        }

        public void setPersonalImage(String personalImage) {
            this.personalImage = personalImage;
        }

        public String getSessionId() {
            return sessionId;
        }

        public void setSessionId(String sessionId) {
            this.sessionId = sessionId;
        }

        public int getSex() {
            return sex;
        }

        public void setSex(int sex) {
            this.sex = sex;
        }

        public String getSignature() {
            return signature;
        }

        public void setSignature(String signature) {
            this.signature = signature;
        }

        public int getUserId() {
            return userId;
        }

        public void setUserId(int userId) {
            this.userId = userId;
        }

        public int getVerifiedStatus() {
            return verifiedStatus;
        }

        public void setVerifiedStatus(int verifiedStatus) {
            this.verifiedStatus = verifiedStatus;
        }

        public int getWorkSum() {
            return workSum;
        }

        public void setWorkSum(int workSum) {
            this.workSum = workSum;
        }

        public List<?> getUserLabelList() {
            return userLabelList;
        }

        public void setUserLabelList(List<?> userLabelList) {
            this.userLabelList = userLabelList;
        }
    }
}

4、在moudle模块下的build.gradle文件下:添加以下内容

plugins {
    id 'com.android.application'
}
 
android {
    //添加的内容
    signingConfigs {
        debug {
            storeFile file('../keystore/a.keystore')
            storePassword '123456'
            keyAlias 'key'
            keyPassword '123456'
        }
    }
    compileSdkVersion 31
    buildToolsVersion "30.0.3"
 
    defaultConfig {
        applicationId "包名"
        minSdkVersion 23
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
 
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
 
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
 
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
 
    
}
 
dependencies {
 
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    implementation 'com.tencent.mm.opensdk:wechat-sdk-android:+'//微信登录SDK
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
正文:
一、导入依赖
implementation 'com.tencent.mm.opensdk:wechat-sdk-android:+'//微信登录SDK
二、准备微信登录工具类
public class WeChatLoginUtils {
    // 微信开放平台申请的 App ID
    private static final String APP_ID = "换成自己的APP_ID";

    private IWXAPI wxApi; // 微信 API 对象
    private Context context;

    // 构造函数,初始化上下文和微信 API 对象
    public WeChatLoginUtils(Context context) {
        this.context = context;
        // 创建微信 API 对象并注册 App ID
        wxApi = WXAPIFactory.createWXAPI(context, APP_ID, true);
        wxApi.registerApp(APP_ID);
    }

    // 发送微信授权请求的方法
    public void sendWeChatAuthRequest() {
        // 检查是否安装了微信客户端
        if (wxApi.isWXAppInstalled()) {
            // 创建授权请求对象
            SendAuth.Req req = new SendAuth.Req();
            req.scope = "snsapi_userinfo"; // 请求用户授权的作用域,这里请求获取用户信息
            req.state = "wechat_login"; // 自定义字段,可用于回调时识别请求来源
            // 发送授权请求
            wxApi.sendReq(req);
        } else {
            // 如果未安装微信客户端,显示提示信息
            Toast.makeText(context, "请先安装微信客户端", Toast.LENGTH_SHORT).show();
        }
    }
}
三、触发微信登录,例如点击按钮执行微信登录操作
WeChatLoginUtils weChatLoginUtils = new WeChatLoginUtils(this);
weChatLoginUtils.sendWeChatAuthRequest(); //会自动进入WXEntryActivity.java
四、在AndroidManifest.xml声明WXEntryActivity.java
<activity            
android:name=".wxapi.WXEntryActivity"            
android:exported="true"            
android:label="@string/app_name"            
android:launchMode="singleTask"            
android:taskAffinity="com.wd.live"            
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
五、在整体包名位置下建一个名为wxapi的包,包里创建一个名为WXEntryActivity.java的文件(严格按照该命名) 例如包名为:com.XX.XXX
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
 
    private IWXAPI wxApi; // 微信 API 对象
    private static final String TAG = "WXEntryActivity"; // 日志标签
 
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 创建微信 API 对象并处理传入的 Intent
        wxApi = WXAPIFactory.createWXAPI(this, "换成自己的APP_ID");
        wxApi.handleIntent(getIntent(), this);
    }
 
    @Override
    public void onReq(BaseReq baseReq) {
        // 微信请求回调方法,可在此处处理请求相关逻辑,不需要处理时留空
    }
 
    @Override
    public void onResp(BaseResp baseResp) {
        if (baseResp.getType() == ConstantsAPI.COMMAND_SENDAUTH) {
            switch (baseResp.errCode) {
                case BaseResp.ErrCode.ERR_OK:
                    // 用户同意授权,获取到用户的 code,可以通过 code 去服务器换取 access_token 和用户信息
                    String code = ((SendAuth.Resp) baseResp).code;
                    // 发送 code 到服务器进行登录验证
                    HttpUtils.getInstance().getLoginApiService().wxLogin(code)
                            .subscribeOn(Schedulers.io())
                            .observeOn(AndroidSchedulers.mainThread())
                            .subscribe(new Consumer<WeChatLoginBean>() {
                                @Override
                                public void accept(WeChatLoginBean weChatLoginBean) throws Exception {
                                    if(weChatLoginBean.getStatus().equals("0000")) {
                                        //获取的登录用户的信息
                                    }
                                }
                            });
 
                    break;
                case BaseResp.ErrCode.ERR_USER_CANCEL:
                    // 用户取消登录
                    Toast.makeText(this, "用户取消登录", Toast.LENGTH_SHORT).show();
                    break;
                case BaseResp.ErrCode.ERR_AUTH_DENIED:
                    // 用户拒绝授权
                    Toast.makeText(this, "用户拒绝授权", Toast.LENGTH_SHORT).show();
                    break;
                default:
                    // 登录失败
                    Toast.makeText(this, "登录失败", Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }
}

至此实现微信登录功能

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
您好!对于在 Android实现微信登录,您可以按照以下步骤进行操作: 1. 在微信开放平台注册并创建应用:首先,您需要在微信开放平台注册一个开发者账号,并创建一个应用,获取到您的应用ID(AppID)和应用密钥(AppSecret)。 2. 集成微信SDK:在您的 Android 项目中添加微信SDK。您可以通过在项目的 `build.gradle` 文件中添加依赖项来完成此操作。 3. 配置 AndroidManifest.xml:在您的项目的 `AndroidManifest.xml` 文件中,添加微信登录所需的权限和配置信息。例如,添加网络权限和微信登录活动。 4. 发起微信登录:在您的应用中,创建一个按钮或其他触发事件,以便用户点击后发起微信登录。在登录事件中,调用微信SDK提供的接口,向微信发送授权请求。 5. 处理微信登录回调:当用户在微信中确认授权后,微信将跳转回您的应用,您需要在您的应用中处理此回调。通过重写 `onResp` 方法,并在 `WXEntryActivity` 中实现它,以获取授权码或访问令牌。 6. 获取用户信息:一旦您获得了访问令牌,您可以使用该令牌调用微信提供的接口,获取用户的基本信息,如昵称、头像等。 以上是一个大致的步骤,您可以根据微信开放平台提供的文档和示例代码,详细了解每个步骤的具体实现方式。希望对您有所帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值