关于sharesdk微信登录遇到的坑
来源:互联网 发布:电脑网络参数怎么设置 编辑:程序博客网 时间:2024/06/05 02:12
在做微信登录的时候一直遇到没有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里去执行@Overridepublic 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);}}@Overridepublic void onError(Platform platform,inti, Throwable throwable) {if(i == Platform.ACTION_USER_INFOR) {handler.sendEmptyMessage(MSG_AUTH_ERROR);}}@Overridepublic void onCancel(Platform platform,inti) {if(i == Platform.ACTION_USER_INFOR) {handler.sendEmptyMessage(MSG_AUTH_CANCEL);}}}回调结果处理private Handler handler=new Handler(new Handler.Callback() {@Overridepublic 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();//获取数平台数据DBif(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;}});
阅读全文
0 0
- 关于sharesdk微信登录遇到的坑
- 关于ShareSDK微信的一个坑
- ShareSDK 微信登录问题
- 关于微信ShareSDK的简单分享
- ShareSDK无法微信分享以及登录的解决方法
- Unity中使用ShareSDK微信登录的问题
- 关于shareSDK微信分享
- 关于ShareSDK 微信分享
- ShareSDK微信分享时的坑
- Android微信登录(shareSDK)注意事项
- shareSDK分享遇到的坑
- ios 微信登录请求遇到的坑
- iOS 【微信登录流程以及遇到的一些坑】
- ShareSDK关于微信分享问题
- ShareSDK关于微信分享问题
- ShareSDK关于微信分享问题
- ShareSDK第三方登录获取QQ和微信的unionid
- Android使用ShareSDK实现微信第三方登录中要获取unionid的方法
- 结构体
- TUXEDO中间件介绍及应用
- SetupDiGetClassDevs-使用SetupDi系列函数进行设备信息的管理
- JAVA设计模式之代理模式
- session.createQuery()与createSQLQuery()区别
- 关于sharesdk微信登录遇到的坑
- java正则表达式
- Vero.Machining.Strategist.2017.R1.Win64 1CD 最新版本
- EditText软键盘设置下一步调到指定edittext
- window.frames[iframe].document 在ie可以用,在360、火狐中都不兼容?
- caffe下draw_net.py的使用
- 今天写了一些基础代码,发现自己的奇技淫巧略微多了些
- 关于大神note3手机数据备份
- 不会写代码的产品不是好产品,懂代码的产品才能走得远