@Tyhj
2017-04-21T08:22:41.000000Z
字数 2833
阅读 2825
Android
原文:https://www.zybuluo.com/Tyhj/note/730547
最近用到支持第三方登录和分享,之前其实也做过了,使用的是友盟的SDK,所以这次想试试Mob的,毕竟有免费的那个短信验证
很简单,直接用sdk自带的,相当于一个dialog就可以用了,界面也不差。但是要去每一个平台去创建应用,申请APPKey和AppSecret,没什么难的,就是别忘了添加代码混淆规则。
private void showShare() {OnekeyShare oks = new OnekeyShare();//关闭sso授权oks.disableSSOWhenAuthorize();// title标题,印象笔记、邮箱、信息、微信、人人网、QQ和QQ空间使用oks.setTitle("聚宝籍");// titleUrl是标题的网络链接,仅在Linked-in,QQ和QQ空间使用oks.setTitleUrl(getString(R.string.url_share_app));// text是分享文本,所有平台都需要这个字段oks.setText(getString(R.string.its_signature));//分享网络图片,新浪微博分享网络图片需要通过审核后申请高级写入接口,否则请注释掉测试新浪微博oks.setImageUrl(getString(R.string.logo));// imagePath是图片的本地路径,Linked-In以外的平台都支持此参数//oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片// url仅在微信(包括好友和朋友圈)中使用oks.setUrl(getString(R.string.url_share_app));// comment是我对这条分享的评论,仅在人人网和QQ空间使用//oks.setComment("我是测试评论文本");// site是分享此内容的网站名称,仅在QQ空间使用oks.setSite("聚宝籍");// siteUrl是分享此内容的网站地址,仅在QQ空间使用oks.setSiteUrl(getString(R.string.url_share_app));// 启动分享GUIoks.show(this);}
首先要去微信申请那个登录权限,要Money的。
然后注意一点是,登录回调反馈
<!-- 微信分享回调 --><activityandroid:name=".wxapi.WXEntryActivity"android:configChanges="keyboardHidden|orientation|screenSize"android:exported="true"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar" />//对于QQ<activityandroid:name="com.mob.tools.MobUIShell"android:configChanges="keyboardHidden|orientation|screenSize"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:windowSoftInputMode="stateHidden|adjustResize"><intent-filter>//重点在这里,这个要改<data android:scheme="tencent1106041134" /><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.BROWSABLE" /><category android:name="android.intent.category.DEFAULT" /></intent-filter><!-- 调用新浪原生SDK,需要注册的回调activity --><intent-filter><action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>
然后就是授权和取消授权的问题,已授权的话不会跳到授权那个页面去的,所以每次授权的时候判断一下,如果已授权的话就撤销一下授权。对于微信还必须以正式签名打包安装才可以成功。
weixinfd = ShareSDK.getPlatform(Login.this,Wechat.NAME);weixinfd.setPlatformActionListener(this); // 设置分享事件回调if(weixinfd.isAuthValid()){weixinfd.removeAccount(true);}weixinfd.SSOSetting(false); //设置false表示使用SSO授权方式weixinfd.showUser(null);//授权并获取用户信息//回调监听@Overridepublic void onComplete(Platform platform, int i, HashMap<String, Object> res) {//获取资料String name=platform.getDb().getUserName();//获取用户名字String avatar=platform.getDb().getUserIcon(); //获取用户头像String unionid = (String) res.get("unionid");//Log.e("成功","微信登录:"+"unionid:"+unionid+" name"+name+"avatar:"+avatar);}@Overridepublic void onError(Platform platform, int i, Throwable throwable) {toast("失败");}@Overridepublic void onCancel(Platform platform, int i) {Log.e("取消","xxx");}
其中那个反馈只有onCancel在Ui线程中吧,其他的都是在子线程中返回的。