Android 微信登陆

谁说胖子不能爱 提交于 2021-01-07 13:38:31

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() {
   
   

                    }
                });
            }
        });
        }
}

写到这,微信登陆就完成了!!!!
最后 喜欢的话 就点个赞吧!!!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!