微信登录

1.在build.gradle文件中,添加如下依赖即可:

dependencies {
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}

AndroidManifest.xml 设置,添加必要的权限支持:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

3.4 在代码中使用
3.4.1 在界面上增加一个Button按钮,方便模拟登陆发起
新增一个Constants .java文件用于记录全局的常量

public class Constants {
    public static final String APP_ID = "wxxxxxxx"; //替换为申请到的app id

    public static IWXAPI wx_api; //全局的微信api对象
}

这里的wxxxxxxx是app id例如:wx4c96b6b8da494224
这个时候需要将下载好的东西放到app下
并且还需要加入依赖

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"
     signingConfigs { //在android代码块下写
        debug {//这个地方可以写成 release
            storeFile file('tech.keystore')
            keyAlias "tech"
            storePassword "123456"
            keyPassword "123456"
        }
    }
    }

在defaultConfig他下面加入

defaultConfig {
        applicationId "com.wd.tech"
        minSdkVersion 16
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
        javaCompileOptions {
            annotationProcessorOptions {
                includeCompileClasspath = true
            }
        }

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

登录界面ctivity.java中的内容如下

public class MainActivity extends Activity {    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //创建微信api并注册到微信
        Constants.wx_api = WXAPIFactory.createWXAPI(MainActivity.this, Constants.APP_ID, true);
        Constants.wx_api.registerApp(Constants.APP_ID);

        Button btn = (Button)findViewById(R.id.button1);//得到按钮    
        btn.setOnClickListener(new OnClickListener() { //注册按钮点击事件 
            @Override
            public void onClick(View v) {                   
                //发起登录请求
                final SendAuth.Req req = new SendAuth.Req();
                req.scope = "snsapi_userinfo";
                req.state = "wechat_sdk_demo_test";
                Constants.wx_api.sendReq(req);                           
            }               
        });
    }
}

这时候就可以发起微信登录了,但是要得到微信的返回结果,还需要下面的步骤
1.新建WXEntryActivity.java
在包名下面创建wxapi的包,并在wxapi的包中创建WXEntryActivity继承Activity,实现IWXAPIEventHandler接口,最后在Manifest中设置Activity的exported属性为true。这条很重要,如果不是”包名.wxapi.WXEntryActivity”的路径,就获取不到返回值。

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        

        Constants.wx_api.handleIntent(getIntent(), this);
    }

    //微信请求相应
    @Override
    public void onReq(BaseReq baseReq) {

    }

    //发送到微信请求的响应结果
    @Override
    public void onResp(BaseResp resp) {
        switch (resp.errCode) {
            case BaseResp.ErrCode.ERR_OK:
                Log.i("WXTest","onResp OK");

                if(resp instanceof SendAuth.Resp){
                    SendAuth.Resp newResp = (SendAuth.Resp) resp;
                    //获取微信传回的code
                    String code = newResp.code;
                    Log.i("WXTest","onResp code = "+code);
                }

                break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                Log.i("WXTest","onResp ERR_USER_CANCEL ");
                //发送取消
                break;
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
                Log.i("WXTest","onResp ERR_AUTH_DENIED");
                //发送被拒绝
                break;
            default:
                Log.i("WXTest","onResp default errCode " + resp.errCode);
                //发送返回
                break;
        }
        finish();
    }
}

在AndroidManifest.xml中对WXEntryActivity进行配置

<activity
    android:exported="true"
    android:name=".wxapi.WXEntryActivity" 
    android:launchMode="singleTop"
    android:theme="@android:style/Theme.NoDisplay"/> 

一定要记得去网络工具类加入ak

.addHeader("ak","0110010010000")

最后在WXEntryActivity 下面记得网络请求

String sessionId = wxBean.getResult().getSessionId();
                                        int userId = wxBean.getResult().getUserId();
                                        SharedPreferences user = getSharedPreferences("user", MODE_PRIVATE);
                                        SharedPreferences.Editor edit = user.edit();
                                        edit.putString("sessionId",sessionId)
                                                .putInt("userId",userId)
                                                .commit();
                                        Toast.makeText(WXEntryActivity.this, wxBean.getMessage(), Toast.LENGTH_SHORT).show();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值