最近产品有个需求说能拿到第三方的邮箱就直接登录,拿不到再去自己平台填写邮箱注册。之前一直用的友盟分享发现是拿不到facebook平台的邮箱的只能拿到用户名等信息。但是对比其他国外的第三方登录平台发现是可以拿到邮箱的。so,这是友盟的问题。
ShareSdk VS 友盟
其实除了facebook拿不到邮箱以外ShareSdk跟友盟其实两个平台是差不多的。另外之前发现友盟的另外Twitter的最近包会有个崩溃的bug现在不知道修复没有,所以我觉得友盟对国外平台的支持可能没有ShareSdk做的好
ShareSdk接入
决定友盟换ShareSdk之后去官网看了一下,接入方式最新推荐的gradle的方式接入。但是这种方式个人不太推荐。有两个问题
- 编译会变慢
- 有时候莫名其妙的报错,应该是资源没下载下下来。
gradle方式接入:
其实跟着官网走基本没什么大问题,只是我眼瞎,没有注意到最后的注意事项
//引入mob插件
classpath 'com.mob.sdk:MobSDK:+'
复制代码
//在模块中引入
apply from: '../MobSDK.gradle'
复制代码
//MobSDK.gradle 文件
apply plugin: 'com.mob.sdk'
MobSDK {
appKey "mob申请的key"
appSecret "mob申请的Secret"
ShareSDK {
//平台配置信息
devInfo {
SinaWeibo {
……
}
复制代码
注意事项
- ShareSDK默认会添加OnekeyShare库,如果您不需要这个库,可以在ShareSDK下设置“gui false”来关闭OnekeyShare
- MobSDK默认为ShareSDK提供最新版本的集成,如果您想锁定某个版本,可以在ShareSDK下设置“version “某个版本””来固定使用这个版本
- 如果使用MobSDK的模块会被其它模块依赖,请确保依赖它的模块也引入MobSDK插件,或在此模块的gradle中添加
- 在组件化开发中被其它模块依赖模块都要引
apply plugin: 'com.mob.sdk'
如果编译不报错导包导不了换这一行apply from: '../MobSDK.gradle'
jar包方式引入
因为gradle引入编译实在太慢,所以后来还是换了jar包的方式。jar包集成ShareSDK.xml
需要自己配置一下,还有需要自己定义自己在配置文件中修改一下key
已经一些回调的activity
。这里建议大家写成组件,方便以后直接复制就可以用。
具体代码
/**
* 第三方登录
*/
public void thirdPartyLogin(String typeId) {
Platform platform;
if (AccountPlatformType.TYPE_FACEBOOK.equals(typeId)) {
platform = ShareSDK.getPlatform(Facebook.NAME);
}else{
platform = ShareSDK.getPlatform(Wechat.NAME);
}
//回调信息,可以在这里获取基本的授权返回的信息,但是注意如果做提示和UI操作要传到主线程handler里去执行
platform.setPlatformActionListener(new PlatformActionListener() {
@Override
public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
//提交数据到我们自己的服务器
// Set<Map.Entry<String, Object>> entries = hashMap.entrySet();
// for (Map.Entry<String, Object> entry : entries) {
// AppLogUtil.e("第三方登录===》"+entry.getKey()+"----"+entry.getValue());
// }
String openId;
String nickName;
String avatar;
if (AccountPlatformType.TYPE_FACEBOOK.equals(typeId)) { //facebook
openId = (String) hashMap.get("id");
nickName = (String) hashMap.get("name");
avatar = platform.getDb().getUserIcon();
} else {
openId = (String) hashMap.get("unionid");
nickName = (String) hashMap.get("nickname");
avatar = (String) hashMap.get("headimgurl");
}
}
@Override
public void onError(Platform platform, int i, Throwable throwable) {
}
@Override
public void onCancel(Platform arg0, int i) {
}
});
platform.SSOSetting(false);//设置单点登录
platform.showUser(null);//执行登录,登录后在回调里面获取用户资料
}
复制代码
获取facebook的email是在hashMap里面而不是在platform里面。所以还是要打印一些才知道自己想要的信息在哪里
总结
水一篇,很久没有写过东西了。这次接第三方登录花了一点时间。其中很大的原因就是自己眼瞎没看到注意的信息,还有就是平台的key在另外一个安卓那里不是我自己申请的,其中微博分享出错找他,他一开始说key没错,结果找了半天发现原来是他看错了~
在选择一些第三方集成时开始一定要做好相关的评估,比如最近我们后台说友盟的推送测试服推送不友好想换极光,这些都是需要浪费人力浪费时间去修改的,虽然不是很难,但是在接入的时候多去论坛看看别人接入有什么坑评估一下再动手做岂不是更好吗~