Android微信登录是个坑(shareSDK)

标签(空格分隔): shareSDK 微信登录 Android


第三方登录,只有微信是最麻烦的东西,之所以说麻烦是官方文档写的真的,网上的各种demo虽然能跑,但是却总有一些小问题注意不到。


首先,注册微信的开发者帐号,注意先生成Key文件,打包,然后再去获得微信需要的两个值。检查工具
下载检查工具
微信包的位置,写法要严格

"com.jiuyuhulian.LiveRoom.wxapi.WXEntryActivity"            android:theme="@android:style/Theme.Translucent.NoTitleBar"            android:configChanges="keyboardHidden|orientation|screenSize"            android:exported="true"            android:screenOrientation="portrait"        />

AndroidStudio的gradle虽然强大,但是也很难掌握,Asset文件夹,最好右键new->Folder->AssetFoleder去建立, 然后将ShareSDK的xml文件放进去。

WXEntryActivity 代码就不贴了,可以去ShareSDK找最新的Demo, 切记不要拿Demo直接导入,有的版本很旧。
/** 微信登录调用 */public void WeChatLogin(){        Platform weixinfd = ShareSDK.getPlatform(Wechat.NAME);        weixinfd.setPlatformActionListener(this);        if (weixinfd.isValid ()){            weixinfd.removeAccount();        }        Log.d("LOGIN", "weixinfd.showUser");        weixinfd.showUser(null);    }/** * 微信登录回调 * @param platform * @param action */@Overridepublic void onCancel(Platform platform, int action) {    Message msg = new Message();    msg.what = MSG_ACTION_CCALLBACK;    msg.arg1 = 3;    msg.arg2 = action;    msg.obj = platform;    UIHandler.sendMessage(msg, this);}@Overridepublic void onComplete(Platform platform, int action, HashMap res) {    Message msg = new Message();    msg.what = MSG_ACTION_CCALLBACK;    msg.arg1 = 1;    msg.arg2 = action;    System.out.println(res);    //获取资料    String nickname = platform.getDb().getUserName();//获取用户名字    String iconUri = platform.getDb().getUserIcon(); //获取用户头像    platform.getDb().get("openid");    String openid =platform.getDb().getUserId();    String token = platform.getDb().getToken();    String refresh_token111 = platform.getDb().get("refresh_token");    String toJSLogin = "{" +            "  \"headimgurl\" : \"" + iconUri + "\","            + "  \"nickname\" : \"" + nickname + "\","            + "  \"openid\" :  \""+ openid + "\""            + "}";    Log.d("WXCHATLOGIN", toJSLogin);    msg.obj = toJSLogin;    UIHandler.sendMessage(msg, this);}@Overridepublic void onError(Platform platform, int action, Throwable t) {    t.printStackTrace();    Message msg = new Message();    msg.what = MSG_ACTION_CCALLBACK;    msg.arg1 = 2;    msg.arg2 = action;    msg.obj = t;    UIHandler.sendMessage(msg, this);    // 分享失败的统计    ShareSDK.logDemoEvent(4, platform);}// 回调handleMessage@Overridepublic boolean handleMessage(Message msg) {    switch (msg.arg1) {        case 1: {            // 成功            String str = (String) msg.obj;            popFragment.getLoginwebView().loadUrl(                    String.format("javascript:wxLogin(" + str + ")"));            Toast.makeText(mContext, "成功", Toast.LENGTH_SHORT).show();        }        break;        case 2: {            // 失败            Toast.makeText(mContext, "失败", Toast.LENGTH_SHORT).show();            String expName = msg.obj.getClass().getSimpleName();            if ("WechatClientNotExistException".equals(expName)                    || "WechatTimelineNotSupportedException".equals(expName)                    || "WechatFavoriteNotSupportedException".equals(expName)) {                Toast.makeText(mContext, "请安装微信客户端", Toast.LENGTH_SHORT).show();            }        }        break;        case 3: {            Toast.makeText(mContext, "取消····", Toast.LENGTH_SHORT)                    .show();        }        break;    }    return false;}

更多相关文章

  1. Android获取屏幕分辨率及DisplayMetrics简介
  2. Android与服务器端数据交互(http协议整合struts2+android)
  3. 如何使用Jdbc和Servlet操作Mysql数据库,编写Android登录注册服务
  4. [原创]Android中LocationManager的简单使用,获取当前位置
  5. Android中经常用到的方法--SDcard下文件的操作
  6. Android获取经纬度,计算距离,方位角
  7. 传感器使用简介
  8. Android(安卓)SD卡创建文件和文件夹失败
  9. 解决windows下eclipse中android项目关联android library project

随机推荐

  1. android 获取手机设备信息
  2. Android(安卓)源码阅读之MMS
  3. android Camera模块分析
  4. Android实现对imageview的拖动以及缩放
  5. android 常用代码
  6. Android(安卓)创建与解析XML(五)—— Dom4j
  7. android handle ui 更新
  8. Android(安卓)View.startAnimation()动画
  9. android设置图片变化的四种效果代码
  10. To make the android emulator (AVD) wor