关于sharesdk微信登录遇到的坑

2023-11-29 00:10
文章标签 微信 登录 遇到 sharesdk

本文主要是介绍关于sharesdk微信登录遇到的坑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在做微信登录的时候一直遇到没有scope权限的问题,网上找了很久都没找到解决办法,最后发现只是一个小失误导致的,我的错误就是在sharesdk中没有在对应平台写上对应的appid和appsecret。
抛去这个错误,说实话,微信分享和登录的确存在很多坑,一不小心就会出错,要是看微信的官方文档,,,,,那还是算了,为啥就不多说了,我在这里把我感觉是坑的地方总结写出来,希望对遇到这些错误的朋友有所帮助。
我按照配置步骤来写,把坑穿插在里边。
1.首先就是集成sharesdk了,具体的这里就不说了,官方文档写的很详细
没有集成好的,请看这里 http://wiki.mob.com/sdk-share-android-3-0-0/

需要注意的是:
集微信或者微信朋友圈,请查看AndroidManifest.xml配置文件里的package路径,需要在package目录下创建wxapi目录再放置WXEntryActivity。 没有此activity在微信分享后回调会检查是否有此activity,没有将会报错。
<activity
android:name=".wxapi.WXEntryActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait" />

对于WXEntryActivity类里边的内容,可以参考sharesdk中demo里边的写法,很少的东西,我直接贴出来吧
public class WXEntryActivity extends WechatHandlerActivity {
/**
* 处理微信发出的向第三方应用请求app message
* <p>
* 在微信客户端中的聊天页面有“添加工具”,可以将本应用的图标添加到其中
* 此后点击图标,下面的代码会被执行。Demo仅仅只是打开自己而已,但你可
* 做点其他的事情,包括根本不打开任何页面
*/
public void onGetMessageFromWXReq(WXMediaMessage msg) {
if (msg != null) {
Intent iLaunchMyself = getPackageManager().getLaunchIntentForPackage(getPackageName());
startActivity(iLaunchMyself);
}
}/**
* 处理微信向第三方应用发起的消息
* <p>
* 此处用来接收从微信发送过来的消息,比方说本demo在wechatpage里面分享
* 应用时可以不分享应用文件,而分享一段应用的自定义信息。接受方的微信
* 客户端会通过这个方法,将这个信息发送回接收方手机上的本demo中,当作
* 回调。
* <p>
* 本Demo只是将信息展示出来,但你可做点其他的事情,而不仅仅只是Toast
*/
public void onShowMessageFromWXReq(WXMediaMessage msg) {
if (msg != null && msg.mediaObject != null
&& (msg.mediaObject instanceof WXAppExtendObject)) {
WXAppExtendObject obj = (WXAppExtendObject) msg.mediaObject;
Toast.makeText(this, obj.extInfo, Toast.LENGTH_SHORT).show();
}
}
}


如果只是实现简单的分享登录,就这样写就行了,还要有其他操作的话,可以根据注释自己来自定义实现,这里就不多说了。

2.在微信开放平台添加自己的应用
微信开放平台地址 : https://open.weixin.qq.com/

在管理中心中管理自己的应用



点击创建应用
创建应用的时候 容易出错的地方是 ,包名和签名要写对,包名就是你应用的包名,不用多说。签名是你的应用的签名文件的MD5值(1,英文字母必须是小写,2.要去掉所有的“:”)。

3.微信审核通过后,并且已经开通了登录接口


拿到微信中的appid和appsecret,替换应用中sharesdk.xml文件中微信和微信朋友圈的值,


4.在sharesdk中配置微信的appid和appsecret
如果sharesdk中配置错误,也会提示scope错误


5.调用代码进行分享
点击事件
case R.id.ll_weichat:
llWeiChat.setClickable(false);
weiChat = ShareSDK.getPlatform(Wechat.NAME);
/*weiChat.setPlatformActionListener(myLoGinListener);
//authorize与showUser单独调用一个即可
//weiChat.authorize();//单独授权,OnComplete返回的hashmap是空的
weiChat.showUser(null);//授权并获取用户信息
//移除授权
//weibo.removeAccount(true);*/
if (!weiChat.isClientValid()){
ToastUtil.showMessage("您尚未安装微信客户端");
return;
}
authorize(weiChat);


private voidauthorize(Platform plat){
if(plat ==null) {
ToastUtil.showMessage("授权平台为空");
return;
}
//判断指定平台是否已经完成授权
/*if(plat.isAuthValid() && ) {
String userId = plat.getDb().getUserId();
if (userId != null) {
return;
}
}*/
plat.setPlatformActionListener(myLoGinListener);
// true不使用SSO授权,false使用SSO授权
plat.SSOSetting(false);
//获取用户资料
plat.showUser(null);
}

监听事件
private classMyLoGinListener implements PlatformActionListener {
//回调信息,可以在这里获取基本的授权返回的信息,但是注意如果做提示和UI操作要传到主线程handler里去执行
@Override
public void onComplete(Platform platform,inti, HashMap<String, Object> hashMap) {
if(i == Platform.ACTION_USER_INFOR) {
Message msg =newMessage();
msg.what=MSG_AUTH_COMPLETE;
msg.obj=newObject[] {platform, hashMap};
handler.sendMessage(msg);
}
}@Override
public void onError(Platform platform,inti, Throwable throwable) {
if(i == Platform.ACTION_USER_INFOR) {
handler.sendEmptyMessage(MSG_AUTH_ERROR);
}
}@Override
public void onCancel(Platform platform,inti) {
if(i == Platform.ACTION_USER_INFOR) {
handler.sendEmptyMessage(MSG_AUTH_CANCEL);
}
}
}回调结果处理
private Handler handler=new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
switch(msg.what) {
caseMSG_AUTH_CANCEL: {
//取消授权
ToastUtil.showMessage("取消授权");
}
break;
caseMSG_AUTH_ERROR: {
//授权失败
ToastUtil.showMessage("授权失败");
}
break;
caseMSG_AUTH_COMPLETE: {
//ToastUtil.showMessage("授权成功");
dialog.dismiss();
//授权成功
Object[] objs = (Object[]) msg.obj;
Platform platform = (Platform) objs[0];
HashMap<String, Object> res = (HashMap<String, Object>) objs[1];
platDB= platform.getDb();//获取数平台数据DB
if(platform.getName().equals(Wechat.NAME)) {//通过DB获取各种数据
token=platDB.getToken();
userId=platDB.getUserId();
name=platDB.getUserName();
gender=platDB.getUserGender();
headImageUrl=platDB.getUserIcon();
if("m".equals(gender)) {
gender="1";
}else{
gender="2";
}}else if(platform.getName().equals(QQ.NAME)) {
// QQ登录
token=platDB.getToken();
userId=platDB.getUserId();
name= res.get("nickname").toString();//名字
gender= res.get("gender").toString();//年龄
headImageUrl= res.get("figureurl_qq_2").toString();//头像figureurl_qq_2中等图,figureurl_qq_1缩略图
String city = res.get("city").toString();//城市
String province = res.get("province").toString();//省份
}
}
break;
}
return false;
}
});




这篇关于关于sharesdk微信登录遇到的坑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/430725

相关文章

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

mysql主从及遇到的问题解决

《mysql主从及遇到的问题解决》本文详细介绍了如何使用Docker配置MySQL主从复制,首先创建了两个文件夹并分别配置了`my.cnf`文件,通过执行脚本启动容器并配置好主从关系,文中还提到了一些... 目录mysql主从及遇到问题解决遇到的问题说明总结mysql主从及遇到问题解决1.基于mysql

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

Anaconda 中遇到CondaHTTPError: HTTP 404 NOT FOUND for url的问题及解决办法

最近在跑一个开源项目遇到了以下问题,查了很多资料都大(抄)同(来)小(抄)异(去)的,解决不了根本问题,费了很大的劲终于得以解决,记录如下: 1、问题及过程: (myenv) D:\Workspace\python\XXXXX>conda install python=3.6.13 Solving environment: done.....Proceed ([y]/n)? yDownloa

uniapp设置微信小程序的交互反馈

链接:uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗: title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon:'error'是设置我们失败的logo 设置的文字上限是7个文字,如果需要设置的提示文字过长就需要设置icon并给

Shell脚本实现自动登录服务器

1.登录脚本 login_server.sh #!/bin/bash# ReferenceLink:https://yq.aliyun.com/articles/516347#show all host infos of serverList.txtif [[ -f ./serverList.txt ]]thenhostNum=`cat ./serverList.txt | wc -l`e

Android 友盟消息推送集成遇到的问题

友盟消息推送遇到的问题 集成友盟消息推送,步骤根据提供的技术文档接入便可。可是当你集成到项目中去的时候,可能并不是一帆风顺就搞定,因为你项目里面是可能集成了其他的sdk(比如支付宝,微信,七鱼等等三方的sdk)。那么这个时候,再加上友盟的消息推送sdk集成可能就会出现问题。 问题清单 友盟消息推送sdk和支付宝sdk冲突问题 后台配置了消息推送,也显示发送成功,但是手机没有收到消息通知

基于微信小程序与嵌入式系统的智能小车开发(详细流程)

一、项目概述 本项目旨在开发一款智能小车,结合微信小程序与嵌入式系统,提供实时图像处理与控制功能。用户可以通过微信小程序远程操控小车,并实时接收摄像头采集的图像。该项目解决了传统遥控小车在图像反馈和控制延迟方面的问题,提升了小车的智能化水平,适用于教育、科研和娱乐等多个领域。 二、系统架构 1. 系统架构设计 本项目的系统架构主要分为以下几个部分: 微信小程序:负责用户界面、控制指令的