Android 微信套餐之微信登录

小白踩坑

谨慎! ! ! !   谨慎! ! ! !   谨慎! ! ! !

关于微信登录 和微信进行绑定

 第一步 :导入依赖

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

//api 全局使用

第二步 : Application里面进行初始化App和初始化

public class App extends MultiDexApplication {

    public static IWXAPI mWxApi;

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

}

第三步: 清单文件

          <activity android:name=".wxapi.WXEntryActivity"

                         android:exported="true"/>

复制到app下的清单文件下就可以

第四步:创建包 包名:wxapi

 注意 : 包一定要在app下建包 如果在base里面调用 能拉起微信登录 但是无法回调(坑一)

第五步: 创建微信的回调类

 在wxapi下创建WXEntryActivity类 这个是微信的回调比如说是在登录成功之后获取的个人信息在这里进行处理

大概的流程就是这样

具体过程:

1.首先我这里有一个绑定微信的功能

//绑定微信
if (trim.equals("未绑定")) {
    mTextWeixin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            SendAuth.Req req = new SendAuth.Req();
            req.scope = "snsapi_userinfo";
            //这个是为了区分是登录还是绑定
            req.state = "wechat_sdk_bind";
            App.mWxApi.sendReq(req);
        }
    });
}
//登录微信
if (i == R.id.iv_wx) {
    if (!mWxApi.isWXAppInstalled()) {
        Toast.makeText(context, "您还没有安装微信哦~", Toast.LENGTH_SHORT).show();
    } else {
        final SendAuth.Req req = new SendAuth.Req();
        req.scope = "snsapi_userinfo";
        req.state = "wechat_sdk_login";
        mWxApi.sendReq(req);
    }
}

2.微信回调

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.widget.Toast;

import com.baselibrary.net.HttpHelper;
import com.baselibrary.net.HttpListener;
import com.baselibrary.utils.App;
import com.baselibrary.utils.SharedPreUtils;
import com.example.loginlibrary.entity.LoginEntity;
import com.google.gson.Gson;
import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.wd.tech.activity.MainActivity;
import com.wd.tech.model.SignEntity;

import java.util.HashMap;
import java.util.Map;


/**
 * by:majunbao
 */
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
    private static final int RETURN_MSG_TYPE_LOGIN = 1;
    private static final int RETURN_MSG_TYPE_SHARE = 2;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //如果没回调onResp,八成是这句没有写
        App.mWxApi.handleIntent(getIntent(), this);
    }

    // 微信发送请求到第三方应用时,会回调到该方法
    @Override
    public void onReq(BaseReq req) {
    }

    // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
    //app发送消息给微信,处理返回消息的回调
    @Override
    public void onResp(BaseResp resp) {
        Log.d("WXEntryActivity", "错误码 : " + resp.errCode + "");
        switch (resp.errCode) {
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                if (RETURN_MSG_TYPE_LOGIN == resp.getType()) {
                    Toast.makeText(this, "登录失败", Toast.LENGTH_SHORT).show();
                }
                if (RETURN_MSG_TYPE_SHARE == resp.getType()) {
                    Toast.makeText(this, "分享失败", Toast.LENGTH_SHORT).show();
                }
                break;
            case BaseResp.ErrCode.ERR_OK:
                switch (resp.getType()) {
                    case RETURN_MSG_TYPE_LOGIN:
                        //拿到了微信返回的code,立马再去请求access_token
                        String code = ((SendAuth.Resp) resp).code;
                        Toast.makeText(this, ""+code, Toast.LENGTH_SHORT).show();
                        //这里判断类型是微信登录还是绑定微信账号
                        String state = ((SendAuth.Resp) resp).state;
                        //判断是绑定微信账号
                        if (state.equals("wechat_sdk_bind")) {
                            /*
                             * 绑定微信
                             * */
                            doBindWxHttp(code);
                        } else {
                            /*
                            * 微信登录 获取用户信息
                            **/
                            getAccessToken(code);
                        }
                        break;

                    case RETURN_MSG_TYPE_SHARE:
                        Toast.makeText(this, "微信分享成功", Toast.LENGTH_SHORT).show();
                        finish();
                        break;
                }
                break;
        }
        


    }

    private void getAccessToken(String code) {
        Map<String, String> map = new HashMap<>();
        map.put("code", code);
        new HttpHelper(this).post("/techApi/user/v1/weChatLogin",map,null,false,false).result(new HttpListener() {
            @Override
            public void success(String data) {
                if (data != null){
                    Log.i("TAG","WxBind"+data);
                    LoginEntity loginEntity = new Gson().fromJson(data, LoginEntity.class);
                    LoginEntity.ResultBean result = loginEntity.getResult();
                    String nickName = result.getNickName();
                    String headPic = result.getHeadPic();
                    int userId = result.getUserId();
                    String sessionId = result.getSessionId();
                    SharedPreUtils.put(WXEntryActivity.this, "nickName", nickName);
                    SharedPreUtils.put(WXEntryActivity.this, "headPic", headPic);
                    SharedPreUtils.put(WXEntryActivity.this, "userId", userId);
                    SharedPreUtils.put(WXEntryActivity.this, "sessionId", sessionId);
                    SharedPreUtils.put(WXEntryActivity.this,"SUCCESSUP",true);
                    SharedPreUtils.put(WXEntryActivity.this, "isLogin", true);
                    Toast.makeText(WXEntryActivity.this, ""+nickName, Toast.LENGTH_SHORT).show();
                    Toast.makeText(WXEntryActivity.this, ""+headPic, Toast.LENGTH_SHORT).show();
                    Toast.makeText(WXEntryActivity.this, ""+userId, Toast.LENGTH_SHORT).show();
                    Toast.makeText(WXEntryActivity.this, ""+sessionId, Toast.LENGTH_SHORT).show();
                    startActivity(new Intent(WXEntryActivity.this, MainActivity.class));
                    finish();
                }

            }

            @Override
            public void fail(String error) {

            }
        });
    }

    //绑定微信账号
    private void doBindWxHttp(String code) {
        Map<String, String> map = new HashMap<>();
        map.put("code", code);
        new HttpHelper(this).post("/techApi/user/verify/v1/bindWeChat", map, null, false, false).result(new HttpListener() {
            @Override
            public void success(String data) {
                SignEntity signEntity = new Gson().fromJson(data, SignEntity.class);
                if (signEntity.getStatus().equals("0000")) {
                    Toast.makeText(WXEntryActivity.this, "" + data, Toast.LENGTH_SHORT).show();
                    //绑定完微信进行做任务
                    doTaskHttp();
                    finish();
                } else {
                    Toast.makeText(WXEntryActivity.this, "绑定失败", Toast.LENGTH_SHORT).show();
                    finish();
                }

            }

            @Override
            public void fail(String error) {

            }
        });
    }
    //绑定完微信进行做任务
    private void doTaskHttp() {
        Map<String, String> map = new HashMap<>();
        map.put("taskId", 1007+"" );
        new HttpHelper(this).post("techApi/user/verify/v1/doTheTask", map, null, false, false).result(new HttpListener() {
            @Override
            public void success(String data) {
                SignEntity signEntity = new Gson().fromJson(data, SignEntity.class);
                String status = signEntity.getStatus();
                if (status.equals("0000")) {
                    Toast.makeText(WXEntryActivity.this, "做任务成功", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(WXEntryActivity.this, "做任务失败", Toast.LENGTH_SHORT).show();
                }

            }
            @Override
            public void fail(String error) {

            }
        });
    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值