@Tyhj
2017-04-21T16:22:41.000000Z
字数 2833
阅读 2646
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));
// 启动分享GUI
oks.show(this);
}
首先要去微信申请那个登录权限,要Money的。
然后注意一点是,登录回调反馈
<!-- 微信分享回调 -->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
//对于QQ
<activity
android: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);//授权并获取用户信息
//回调监听
@Override
public 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);
}
@Override
public void onError(Platform platform, int i, Throwable throwable) {
toast("失败");
}
@Override
public void onCancel(Platform platform, int i) {
Log.e("取消","xxx");
}
其中那个反馈只有onCancel在Ui线程中吧,其他的都是在子线程中返回的。