请选择 进入手机版 | 继续访问电脑版

android接入原生微信登录功能

[复制链接]
查看: 232|回复: 0
  • TA的每日心情
    擦汗
    2019-6-2 01:56
  • 签到天数: 25 天

    [LV.4]偶尔看看III

    1002

    主题

    1103

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    65281

    最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

    发表于 2019-4-24 20:20:02 | 显示全部楼层 |阅读模式
    最新动态:
    һ һ


    我们在开发中通常是通过一个按钮来发起微信登录的

    1.   /**
    2.      * 微信登录
    3.      */
    4.     private void setWXLogin() {
    5.         IWXAPI api = WXAPIFactory.createWXAPI(this, WXAppid, true);
    6.         api.registerApp(WXAppid);
    7.         if (api != null && api.isWXAppInstalled()) {
    8.             SendAuth.Req req = new SendAuth.Req();
    9.             req.scope = "snsapi_userinfo";
    10.             req.state = "wechat_sdk_demo_test";
    11.             api.sendReq(req);
    12.         } else {
    13.             Toast.makeText(this, "您尚未安装微信", Toast.LENGTH_SHORT).show();
    14.         }
    复制代码

    服务器:
    1. public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
    2.     //微信appid
    3.     public static final String APP_ID = "wx9af20b2f6c6c126f";
    4.     //微信appSecret
    5.     private String APP_SECRET = "8378bf6e79a1ae0d1249c535010f5df1";
    6.     //第三方app和微信通信的openapid接口
    7.    // 这两个参数在文档中没有找到,可能是瞎了,,,自己在代码里面找了会才找到,这两个常量代表了微信返回的消息类型,是对登录的处理还是对分享的处理,登录会在后面介绍到
    8.     private static final int RETURN_MSG_TYPE_LOGIN = 1;
    9.     private static final int RETURN_MSG_TYPE_SHARE = 2;
    10.     private IWXAPI api;
    11.     private JsonObject jsonObject = null;
    12.     private RequestQueue queue = NoHttp.newRequestQueue();

    13.     @Override
    14.     public void onCreate(Bundle savedInstanceState) {
    15.         super.onCreate(savedInstanceState);
    16.         NoHttp.initialize(getApplication());
    17.         api = WXAPIFactory.createWXAPI(this, APP_ID, true);
    18.         api.handleIntent(this.getIntent(), this);
    19.     }

    20.     @Override
    21.     protected void onNewIntent(Intent intent) {
    22.         super.onNewIntent(intent);
    23.         setIntent(intent);
    24.         api.handleIntent(intent, this);//必须调用此句话
    25.     }

    26.     /**
    27.      * 微信发送的请求将回调此方法
    28.      *
    29.      * @param baseReq
    30.      */
    31.     @Override
    32.     public void onReq(BaseReq baseReq) {
    33.         Log.d("req", baseReq.toString());
    34.         finish();
    35.     }

    36.     /**
    37.      * 发送到微信请求的相应结果
    38.      *
    39.      * @param resp
    40.      */
    41.     @Override
    42.     public void onResp(BaseResp resp) {
    43.         switch (resp.errCode) {
    44.             //发送成功
    45.             case BaseResp.ErrCode.ERR_OK:
    46.                 SendAuth.Resp sendResp = (SendAuth.Resp) resp;
    47.                 if (sendResp != null) {
    48.                     String code = sendResp.code;
    49.                     getAccess_token(code);
    50.                 }
    51.                 if (resp.getType() ==  RETURN_MSG_TYPE_SHARE) {

    52.                 }
    53.                 finish();
    54.                 break;
    55.             //发送取消
    56.             case BaseResp.ErrCode.ERR_USER_CANCEL:
    57.                 break;
    58.             //发送拒绝
    59.             case BaseResp.ErrCode.ERR_AUTH_DENIED:
    60.                 break;
    61.             default:
    62.                 //发送返回
    63.                 break;
    64.         }
    65.     }

    66.     /**
    67.      * 获取openid  accessToken值用于后期操作
    68.      *
    69.      * @param code 请求码
    70.      */
    71.     private void getAccess_token(String code) {

    72.         String path = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
    73.                 + APP_ID
    74.                 + "&secret="
    75.                 + APP_SECRET
    76.                 + "&code="
    77.                 + code
    78.                 + "&grant_type=authorization_code";

    79.         Request<String> info = NoHttp.createStringRequest(path, RequestMethod.GET);
    80.         queue.add(0, info, new OnResponseListener<String>() {
    81.             @Override
    82.             public void onStart(int what) {

    83.             }

    84.             @Override
    85.             public void onSucceed(int what, Response<String> response) {
    86.                 String json=response.get();
    87.                 try {
    88.                     JSONObject object=new JSONObject(json);
    89.                     //获取用户的openid
    90.                     String openid=object.getString("openid");
    91.                     String access_token=object.getString("access_token");
    92.                     getUserMsg(access_token,openid);
    93.                 } catch (JSONException e) {
    94.                     e.printStackTrace();
    95.                 }

    96.             }

    97.             @Override
    98.             public void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis) {

    99.             }

    100.             @Override
    101.             public void onFinish(int what) {

    102.             }
    103.         });
    104.     }

    105.     /**
    106.      * 获取微信个人信息
    107.      *
    108.      * @param access_token
    109.      * @param openid
    110.      */
    111.     private void getUserMsg(final String access_token, final String openid) {
    112.         String path = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid;


    113.         Request<String> info = NoHttp.createStringRequest(path, RequestMethod.GET);
    114.         queue.add(0, info, new OnResponseListener<String>() {
    115.             @Override
    116.             public void onStart(int what) {

    117.             }

    118.             @Override
    119.             public void onSucceed(int what, Response<String> response) {
    120. //              
    121.                 Log.i("wch",response.get()+"");
    122.                 Gson gson = new Gson();
    123.                 WXLoginBean wxLoginBean = gson.fromJson(response.get(), WXLoginBean.class);
    124.                 String nickname = wxLoginBean.getNickname();
    125.               
    126.             }

    127.             @Override
    128.             public void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis) {
    129.                 Toast.makeText(WXEntryActivity.this, "获取失败:" + responseCode, Toast.LENGTH_SHORT).show();
    130.             }

    131.             @Override
    132.             public void onFinish(int what) {

    133.             }
    134.         });

    135.     }
    136.    

    137. }
    复制代码




    在你发起按钮的界面调用一下最上面的方法

    setWXLogin();ok,大功告成


    帖子的最近访客


    ByteEdu声明 1、欢迎大家加入ByteEdu交流群: 群①:221273219 群②:816865824 群③:552042911 群④:713828896
    2、本站所有主题由该帖子作者发表,该帖子作者与 ByteEdu 享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须注明原文的出处
    4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    5、ByteEdu -服务您的独立游戏开发专家!
    6、联系人Email:admin@ByteEdu.com 网址:www.ByteEdu.Com

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    精彩推荐

    专业教育平台

    • 反馈建议:service@ByteEdu.com
    • 工作时间:周一到周五 10:00-19:00
    028-8555 6107

    关注我们

    Copyright   ©2018-2020  www.ByteEdu.Com  Powered by©ByteEdu!  技术支持:成都贝游特教育科技有限公司    ( 蜀ICP备18026143号 )