您的位置:首页 > 移动开发 > Android开发

Android利用ShareSDK实现第三方登录分享

2017-09-18 14:10 351 查看

写在前面

本篇博客主要讲述利用ShareSDK实现一些简单的第三方登陆,以及分享的功能

叙述

就目前而言,很多的APP都支持第三方登录,例如微信登录,QQ登录,微博登陆等等,省去了用户注册的时间,增强了用户体验。

本次以实现QQ的登录以及QQ的分享为例。

配置sdk

1.首先去ShareSDK官方下载一个ShareSDK

SDK包具体地址为:http://www.mob.com/downloadDetail/ShareSDK/android

点击SDK下载即可,下载前会提示选择集成自己需要的第三方登录平台。

在下载完成的文件夹中目录结构如下:



2.选择配置QuickIntegrater.jar

双击QuickIntegrater.jar会弹出以下窗口,点击确定即可



在当前文件夹会生成一个Sample的文件夹,双击打开将文件夹内的内容全部复制到你的项目旗下即可。

注:不要忘记将libs旗下的jar包Add引用一下。

3.配置项目权限

<!-- 添加必要的权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />l
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />


4.添加以下activity的注册

<!-- ShareSDK的activity -->
<activity
android:name="com.mob.tools.MobUIShell"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateHidden|adjustResize">
<intent-filter>
<data android:scheme="tencent100371282" />
<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>
<!--集成line客户端登录授权,需要添如下格式的过滤器-->
<intent-filter>
<data android:scheme="line.1477692153" />
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</activity>
<activity
android:name="sharesdk.demo.wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!-- 填写您从Mob开发者后台中得到的Appkey和AppSecret -->
<meta-data
android:name="Mob-AppKey"
android:value="你的key" />
<meta-data
android:name="Mob-AppSecret"
android:value="你的AppSecret" />


注:以上的key和AppSecret均要填你在ShareSDK官网申请的串。以上配置基本完成。

接下来是你们最喜欢的撸代码环节

如果你想实现第三方登录,实际上有两种方式

一:只是实现授权,并不需要第三方平台的用户数据;

二:不只是授权,还需要获取第三方平台的数据,这种情况一般是自己有独立的账户系统,需要拿到数据进行注册或者标注处理。

第一种撸法:

1.用户触发第三方登录事件

2.调用platform.getDb().getUserId()请求用户在此平台上的ID

3.如果用户ID存在,则认为用户是合法用户,允许进入系统;否则调用authorize()

4.authorize()方法将引导用户在授权页面输入帐号密码,然后目标平台将验证此用户

5.如果onComplete()方法被回调,表示授权成功,引导用户进入系统

6.否则提示错误,调用removeAccount(true)方法,删除可能的授权缓存数据具体实现为下:

public void shouquan() {
Platform weibo = ShareSDK.getPlatform(QQ.NAME);
//回调信息,可以在这里获取基本的授权返回的信息,但是注意如果做提示和UI操作要传到主线程handler里去执行
weibo.setPlatformActionListener(new PlatformActionListener() {

@Override
public void onError(Platform arg0, int arg1, Throwable arg2) {
// TODO Auto-generated method stub
arg2.printStackTrace();
}

@Override
public void onComplete(Platform arg0, int arg1, HashMap<String, Object> arg2) {
//此时代表成功

}

@Override
public void onCancel(Platform arg0, int arg1) {
// TODO Auto-generated method stub

}
});

weibo.authorize();//单独授权,OnComplete返回的hashmap是空的
}


第二种撸法:

1.用户触发第三方登录事件

2.showUser(null)请求授权用户的资料(这个过程中可能涉及授权操作)

3.如果onComplete()方法被回调,将其参数Hashmap代入你应用的Login流程

4.否则提示错误,调用removeAccount(true)方法,删除可能的授权缓存数据

5.Login时客户端发送用户资料中的用户ID给服务端

6.服务端判定用户是已注册用户,则引导用户进入系统,否则返回特定错误码

7.客户端收到“未注册用户”错误码以后,代入用户资料到你应用的Register流程

8.Register时在用户资料中挑选你应用的注册所需字段,并提交服务端注册

9.服务端完成用户注册,成功则反馈客户端引导用户进入系统

10.否则提示错误,调用removeAccount(true)方法,删除可能的授权缓存数据

public void shouquan() {
Platform weibo = ShareSDK.getPlatform(QQ.NAME);
//回调信息,可以在这里获取基本的授权返回的信息,但是注意如果做提示和UI操作要传到主线程handler里去执行
weibo.setPlatformActionListener(new PlatformActionListener() {

@Override
public void onError(Platform arg0, int arg1, Throwable arg2) {
// TODO Auto-generated method stub
arg2.printStackTrace();
}

@Override
public void onComplete(Platform arg0, int arg1, HashMap<String, Object> arg2) {
// TODO Auto-generated method stub
arg0.getDb().exportData();
//遍历Map
Iterator ite = arg2.entrySet().iterator();
String str = "";
while (ite.hasNext()) {
Map.Entry entry = (Map.Entry) ite.next();
Object key = entry.getKey();
Object value = entry.getValue();
str += key + ": " + value+"\n";
//                    System.out.println(key + ": " + value);
}
Toast.makeText(MainActivity.this, str, 1500).show();
//输出所有授权信息
//                arg0.getDb().exportData();
}

@Override
public void onCancel(Platform arg0, int arg1) {
// TODO Auto-generated method stub

}
});

weibo.showUser(null);//授权并获取用户信息

}


注:以上就实现了QQ的登录操作。但是登录的会提示美的厨房的登陆,如果想更改为你自己app登录,则需要修改assets旗下的ShareSDK.xml,找到对应的平台如果是QQ则需要找到QQ标签将对应的AppKey替换成你自己在QQ平台申请的Key即可;

实现第三方分享:

对于分享来说相对比较简单具体实现看如下代码:

private void showShare() {
OnekeyShare oks = new OnekeyShare();
//关闭sso授权
oks.disableSSOWhenAuthorize();

// 分享时Notification的图标和文字  2.5.9以后的版本不     调用此方法
//oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
// title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
oks.setTitle("标题");
// titleUrl是标题的网络链接,仅在人人网和QQ空间使用
oks.setTitleUrl("http://sharesdk.cn");
// text是分享文本,所有平台都需要这个字段
oks.setText("我是分享文本");
// imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片
// url仅在微信(包括好友和朋友圈)中使用
oks.setUrl("http://sharesdk.cn");
// comment是我对这条分享的评论,仅在人人网和QQ空间使用
oks.setComment("我是测试评论文本");
// site是分享此内容的网站名称,仅在QQ空间使用
oks.setSite(getString(R.string.app_name));
// siteUrl是分享此内容的网站地址,仅在QQ空间使用
oks.setSiteUrl("http://sharesdk.cn");

// 启动分享GUI
oks.show(this);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐