集成ShareSdk一键分享和第三方登录
在Mob官网http://mob.com/注册,创建应用,下载SDK,申请APP_key
根据官网开发指南导入SDK到你的项目中:
在assets/ShareSDk.xml中修改你的APP_key
package com.loaderman.thirdpartylogindemo; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import java.util.HashMap; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.PlatformActionListener; import cn.sharesdk.framework.ShareSDK; import cn.sharesdk.onekeyshare.OnekeyShare; import cn.sharesdk.tencent.qq.QQ; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //需要进行初始化 ShareSDK.initSDK(this); } public void showShare(View view) { OnekeyShare oks = new OnekeyShare(); //关闭sso授权 oks.disableSSOWhenAuthorize(); // title标题,印象笔记、邮箱、信息、微信、人人网、QQ和QQ空间使用 oks.setTitle("标题"); // titleUrl是标题的网络链接,仅在Linked-in,QQ和QQ空间使用 oks.setTitleUrl("http://sharesdk.cn"); // text是分享文本,所有平台都需要这个字段 oks.setText("我是分享文本"); //分享网络图片,新浪微博分享网络图片需要通过审核后申请高级写入接口,否则请注释掉测试新浪微博 oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg"); // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数 //oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片 // url仅在微信(包括好友和朋友圈)中使用 oks.setUrl("http://sharesdk.cn"); // comment是我对这条分享的评论,仅在人人网和QQ空间使用 oks.setComment("我是测试评论文本"); // site是分享此内容的网站名称,仅在QQ空间使用 oks.setSite("ShareSDK"); // siteUrl是分享此内容的网站地址,仅在QQ空间使用 oks.setSiteUrl("http://sharesdk.cn"); // 启动分享GUI oks.show(this); } public void showLogin(View view){ Platform qq = ShareSDK.getPlatform(QQ.NAME); //回调信息,可以在这里获取基本的授权返回的信息,但是注意如果做提示和UI操作要传到主线程handler里去执行 qq.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(); startActivity(new Intent(MainActivity.this, EnterActivity.class)); } @Override public void onCancel(Platform arg0, int arg1) { // TODO Auto-generated method stub } }); //authorize与showUser单独调用一个即可 qq.authorize();//单独授权,OnComplete返回的hashmap是空的 qq.showUser(null);//授权并获取用户信息 //移除授权 //weibo.removeAccount(true); } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.loaderman.thirdpartylogindemo.MainActivity"> <Button android:onClick="showShare" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="一键分享"/> <Button android:onClick="showLogin" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="第三方QQ授权登录"/> </LinearLayout>
在创建一个EndterActivity模拟授权后进入登录主页面
效果需要在真机演示即可
注意事项:
1.微信不能分享的问题解决:
在assets/ShareSDk.xml中将微信相关节点的的一个属性修改为:
BypassApproval="true"
2.第三方登录的时候需要在授权的APP开发平台申请对应的APP_key,填入assets/ShareSDk.xml到对应的节点AppKey属性中即可,否则会使用默认的APP信息,如美的厨房的图标,本文中只是简单实现,
根据官网开发中具体步骤:
1、用户触发第三方登录事件
2、showUser(null)请求授权用户的资料(这个过程中可能涉及授权操作)
3、如果onComplete()方法被回调,将其参数Hashmap代入你应用的Login流程
4、否则提示错误,调用removeAccount(true)方法,删除可能的授权缓存数据
5、Login时客户端发送用户资料中的用户ID给服务端
6、服务端判定用户是已注册用户,则引导用户进入系统,否则返回特定错误码
7、客户端收到“未注册用户”错误码以后,代入用户资料到你应用的Register流程
8、Register时在用户资料中挑选你应用的注册所需字段,并提交服务端注册
9、服务端完成用户注册,成功则反馈客户端引导用户进入系统
10、否则提示错误,调用removeAccount(true)方法,删除可能的授权缓存数据