复习快速集成原生微信登录

 

公司好长时间都没有业务了,自己也不能闲着,就复习一下微信登录吧

必须要的:你的appID,app的Secret

你的app要有正式的打包签名例子:在你的build.gradle下的android下:

signingConfigs {
        myConfig {
            storeFile file("你的app,keystore")
            storePassword "app打包的密码"
            keyAlias "你的app别名"
            keyPassword "app打包的密码"
        }
    }
    //以下这些都是死的
    buildTypes {
        release {
            signingConfig signingConfigs.myConfig
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug{
            signingConfig signingConfigs.myConfig
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

第一步,微信开发平台下载登录SDK

 implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

第二步 在application下将你的app注册到微信,不要忘了注册application.

public class App extends Application {
    public static IWXAPI mWxApi;

    @Override
    public void onCreate() {
        super.onCreate();
        mWxApi = WXAPIFactory.createWXAPI(this, "你的appID", false);
        // 将该app注册到微信
        mWxApi.registerApp("你的appID");
    }
}

第三步 拉取你的微信。获取授权

点击微信登录拉取微信:

 @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_weixin_login:
                if (!App.mWxApi.isWXAppInstalled()) {
                    Toast.makeText(this,"你还没有安装微信!",Toast.LENGTH_SHORT).show();
                    return;
                }
                SendAuth.Req req = new SendAuth.Req();
                req.scope = "snsapi_userinfo";
                req.state = "weidu_wx_login";
                App.mWxApi.sendReq(req);
                break;
            default:

                break;
        }

下面是我的demo,MainActivity代码。包含以上代码,要跟着我的步骤走,下面的代码参考一下就可以。

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private SharedPreferences sharedPreferences;
    private String code;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sharedPreferences = this.getSharedPreferences("dw",MODE_PRIVATE);
        findViewById(R.id.btn_weixin_login).setOnClickListener(this);
        code = sharedPreferences.getString("code", "");
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_weixin_login:
                if (!App.mWxApi.isWXAppInstalled()) {
                    Toast.makeText(this,"你还没有安装微信!",Toast.LENGTH_SHORT).show();
                    return;
                }
                SendAuth.Req req = new SendAuth.Req();
                req.scope = "snsapi_userinfo";
                req.state = "weidu_wx_login";
                App.mWxApi.sendReq(req);
                break;
            default:

                break;
        }
    }
    private  void weiXinLogin(){
        Map<String,String> map = new HashMap<>();
        map.put("code",code);
        new HttpHelper(this).result(new HttpHelper.HttpListener() {
            @Override
            public void success(String data) {
                //每个用户的code值是不同的所以登录成功之后要设置为空值
                sharedPreferences.edit().putString("code","").commit();
                Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
            }

            @Override
            public void fail(String error) {

            }
        }).post(Http.BASE_WXLOGIN,map);
    }
    @Override
    protected void onResume() {
        super.onResume();
        if (!TextUtils.isEmpty(sharedPreferences.getString("code",""))){
            weiXinLogin();
        }
    }
}

第四步:创建一个名为wxapi的包,包下创建一个名为WXEntryActivity的类继承Acitivity,实现

IWXAPIEventHandler,并重写
onReq,onResp
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler

第五步:在WXEntryActivity 下的onCreate下

 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        App.mWxApi.handleIntent(getIntent(),this);
    }

第六步:在WXEntryActivity 的onResp下回调,并授权

 @Override
    public void onResp(BaseResp baseResp) {
        //登录回调
        switch (baseResp.errCode) {
            case BaseResp.ErrCode.ERR_OK:
                code = ((SendAuth.Resp) baseResp).code;
                //获取用户信息
                getAccessToken(code);
                //存储code
                SharedPreferences sharedPreferences = this.getSharedPreferences("dw",MODE_PRIVATE);
                sharedPreferences.edit().putString("code",code).commit();
                //微信授权成功,并且获取用户信息之后,你可选择finish或者intent跳转到你的登录页面获取
                finish();
                Intent intent =  new Intent(this, MainActivity.class);
                startActivity(intent);
                break;
            case BaseResp.ErrCode.ERR_AUTH_DENIED://用户拒绝授权
                finish();
                break;
            case BaseResp.ErrCode.ERR_USER_CANCEL://用户取消
                finish();
                break;
            default:
                finish();
                break;
        }

    }
getAccessToken()的方法

1.APP_ID你的appId,

2.secret你的secret

3.code,上面已经获取的用户code

其他的不用动,是死的。

private void getAccessToken(String code) {
        //获取授权
        StringBuffer loginUrl = new StringBuffer();
        loginUrl.append("https://api.weixin.qq.com/sns/oauth2/access_token")
                .append("?appid=")
                .append(APP_ID)
                .append("&secret=")
                .append("APP_SECRET")
                .append("&code=")
                .append(code)
                .append("&grant_type=authorization_code");
    }

最后一步,在你的点击微信登录页面获取到你在WXEntryActivity 用

sharedPreferences存储的code值,在onResume生命周期方法里判断code是否为null,不为空的情况下再去请求接口。
/**
     * 请求微信登录接口
     */
    private void weiXinLogin() {
        Map<String, String> map = new HashMap<>();
        map.put("code", code);
        new HttpHelper(this).result(new HttpHelper.HttpListener() {
            @Override
            public void success(String data) {
                //每个用户的code值是不同的所以登录成功之后要设置为空值
                sharedPreferences.edit().putString("code", "").commit();
                Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void fail(String error) {

            }
        }).post(Http.BASE_WXLOGIN, map);
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (!TextUtils.isEmpty(sharedPreferences.getString("code", ""))) {
            weiXinLogin();
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值