微信新浪分享成功不走回调
检查微信回调WXEntryActivity是否是在包名路径下,
例如 包名是com.a.b(微信友盟开放平台),那么你这个activity应该放在com.a.b.wxapi文件夹下
包名为com.a.b ,这个activity放在com.a.b.view.wxapi文件夹下 导致微信回调失败(新浪同理)
友盟分享个人小坑
微信分享:-error:错误码: 错误信息:分享失败----权限验证失败,请检查你的签名以及该平台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.)帐号下,即同一个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./sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
参数说明
返回说明
正确的Json返回结果:
"openid":"OPENID", "nickname":"NICKNAME", "sex":1, "province":"PROVINCE", "city":"CITY", "country":"COUNTRY", "headimgurl": "/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0", "privilege":[ "PRIVILEGE1", "PRIVILEGE2" ], "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL" }{
建议:
开发者最好保存unionID信息,以便以后在不同应用之间进行用户信息互通。
错误的Json返回示例:
"errcode":40003,"errmsg":"invalid openid" }{
支付宝登录:
private void setAliAuth() {MDialog.Builder mDialog = new MDialog.Builder(mContext, "尚未授权,请先前往支付宝授权?");mDialog.setPositiveButton("去授权", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Runnable authRunnable = new Runnable() {@Overridepublic 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;}}}};