Android友盟三方登录、微信新浪分享成功不走回调

微信新浪分享成功不走回调

检查微信回调WXEntryActivity是否是在包名路径下,

例如 包名是com.a.b(微信友盟开放平台),那么你这个activity应该放在com.a.b.wxapi文件夹下

包名为com.a.b ,这个activity放在com.a.b.view.wxapi文件夹下    导致微信回调失败(新浪同理)

友盟分享个人小坑

微信分享: -error:错误码:2003 错误信息:分享失败----权限验证失败,请检查你的签名以及该平台Appkey权限.

在确认签名无误已经已打包的情况下存在缓存问题,需要卸载微信以及你的APK从新安装

dispatchMessage(122),这个是用户在本手机已登录,之后又在另一台设备登录,本手机缓存微信已登录状态引起的~

解决方法:点击微信,让手机知道微信处于未登录状态即可

友盟第三方登陆

友盟分享成功不需要导入任何包

友盟分享个人小坑

1、自定义分享面板中QQ空间分享(withTargetUrl)url会失败,但是单独用new ShareAction((Activity) context).setPlatform(SHARE_MEDIA.QZONE).withTargetUrl(url)就可以使用;

2、新浪微博分享(withTargetUrl)url会失败,.withText(url)也是可以的。

微信openid和UnionID (多公众号如何判断是否是同一人)区别

通过获取用户基本信息接口,开发者可通过OpenID来获取用户基本信息,而如果开发者拥有多个公众号,可使用以下办法通过UnionID机制来在多公众号之间进行用户帐号互通。

1. 将多个公众号绑定到同一个微信开放平台(open.weixin.qq.com)帐号下,即同一个Union下

2. 通过获取用户基本信息接口中的UnionID来区分用户的唯一性,不过需要注意的是:公众号只有在被绑定到微信开放平台帐号下后,才会获取UnionID。只要是同一个微信开放平台帐号下的公众号,用户的UnionID是唯一的。换句话说, 同一用户,对同一个微信开放平台帐号下的不同应用,UnionID是相同的。

注意两个不同的用户信息

在不同的公众账号下openid是不一样的,而他们的unionid却是一样的。其他的信息不具有唯一性,没有比较意义。但基本信息是一致的。

这样就知道了关注两个公众账号的其实是同一个人。

unionid意义:

对于拥有多个账号的企业来说,unionid可以帮助识别不同公众账号下的用户是否是同一个人。这样在不同账号下对该用户提供的服务可以连续起来了。

还可以去除重复关注的用户数,便于统计真实的关注用户总数。

要第三方登陆的话:

 

SHARE_MEDIA platform = SHARE_MEDIA.WEIXIN; 

UMShareAPI  mShareAPI = UMShareAPI.get(this);

mShareAPI.doOauthVerify(this, platform, umAuthListener);

 

//友盟第三方登陆回调

    private UMAuthListener umAuthListener = new UMAuthListener() {

        @Override
        public void onComplete(SHARE_MEDIA platform, int action, Map data) {

            data.toString()//返回的用户参数
        }

        @Override
        public void onError(SHARE_MEDIA platform, int action, Throwable t) {
            Toast.makeText( getApplicationContext(), "Authorize fail", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancel(SHARE_MEDIA platform, int action) {
            Toast.makeText( getApplicationContext(), "Authorize cancel", Toast.LENGTH_SHORT).show();
        }
    };

微信官方文档,哈哈:

获取用户个人信息(UnionID机制)

接口说明

此接口用于获取用户个人信息。开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。请注意,在用户修改微信头像后,旧的微信头像URL将会失效,因此开发者应该自己在获取用户信息后,将头像图片保存下来,避免微信头像URL失效后的异常情况。

请求说明

http请求方式: GET

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

参数说明

参数 是否必须 说明
access_token 调用凭证
openid 普通用户的标识,对当前开发者帐号唯一
  lang   否 国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语,默认为zh-CN

返回说明

正确的Json返回结果:


"openid":"OPENID",
"nickname":"NICKNAME",
"sex":1,
"province":"PROVINCE",
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
"privilege":[
"PRIVILEGE1", 
"PRIVILEGE2"
],
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"

}

参数 说明
openid 普通用户的标识,对当前开发者帐号唯一
nickname 普通用户昵称
sex 普通用户性别,1为男性,2为女性
province 普通用户个人资料填写的省份
city 普通用户个人资料填写的城市
country 国家,如中国为CN
headimgurl 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
privilege 用户特权信息,json数组,如微信沃卡用户为(chinaunicom)
unionid 用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。

建议:

开发者最好保存unionID信息,以便以后在不同应用之间进行用户信息互通。

错误的Json返回示例:


"errcode":40003,"errmsg":"invalid openid"
}

支付宝登录:   

private void setAliAuth() {
    MDialog.Builder mDialog = new MDialog.Builder(mContext, "尚未授权,请先前往支付宝授权?");
    mDialog.setPositiveButton("去授权", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Runnable authRunnable = new Runnable() {

                @Override
                public void run() {
                    // 构造AuthTask 对象
                    AuthTask authTask = new AuthTask(IDCardCreditActivity.this);
                    // 调用授权接口,获取授权结果
                    //后台生成
                    //authUrl="apiname=com.alipay.account.auth&app_id=你的APPID&app_name=mc&auth_type=AUTHACCOUNT
                    // &biz_type=openservice&method=alipay.open.auth.sdk.code.get&pid=你账号的PID&product_id=APP_FAST_LOGIN
                    // &scope=kuaijie&sign_type=RSA2&target_id=-8979618297616007166&sign=自己生成"
                    Map result = authTask.authV2(authUrl, true);
                    Message msg = new Message();
                    msg.what = SDK_AUTH_FLAG;
                    msg.obj = result;
                    mHandlerAli.sendMessage(msg);
                }
            };

            // 必须异步调用
            Thread authThread = new Thread(authRunnable);
            authThread.start();

        }
    });
    mDialog.create().show();
}

private static final int SDK_AUTH_FLAG = 3;
@SuppressLint("HandlerLeak")
private Handler mHandlerAli = new Handler() {
    @SuppressWarnings("unused")
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case SDK_AUTH_FLAG: {
                @SuppressWarnings("unchecked")
                AuthResult authResult = new AuthResult((Map) msg.obj, true);
                String resultStatus = authResult.getResultStatus();
                // 判断resultStatus 为“9000”且result_code
                // 为“200”则代表授权成功,具体状态码代表含义可参考授权接口文档
                if (TextUtils.equals(resultStatus, "9000") && TextUtils.equals(authResult.getResultCode(), "200")) {
                    // 获取alipay_open_id,调支付时作为参数extern_token 的value
                    // 传入,则支付账户为该授权账户
                    result = authResult.getResult();
                    MLog.e("授权成功\n" + String.format("authCode:%s", authResult.getResult()));

                } else {
                    // 其他状态值则为授权失败
                    MyToast.showMessage("授权失败");

                }
                break;
            }

        }
    }
};

 

你可能感兴趣的:(三方登录,分享,支付)