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

论坛 期权论坛 脚本     
匿名网站用户   2020-12-19 20:21   34   0

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

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

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

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

友盟分享个人小坑

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

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


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

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

友盟第三方登陆

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

微信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<String, String> 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<String, String> 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<String, String>) 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;
            }

        }
    }
};



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP