欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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,拿到之后请妥善保管

  1. 按照微信开放平台给的文档,下载相应的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