在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)方法,删除可能的授权缓存数据


最新文章

  1. 【从零开始学BPM,Day3】自定义表单开发
  2. [转]iostat命令详解
  3. 利用Mongoose来结构化模式与验证
  4. shopnc编译安装IM服务器node.js
  5. P4factory 运行结果展示 basic_routing 以及 ./run_all_tests 的运行结果
  6. 判断ie,并确定其版本号
  7. shell脚本中的标准输出重定向使用涵义
  8. Selenium 自动化验收测试
  9. Linux&amp;shell之高级Shell脚本编程-创建菜单
  10. C# LiNq的语法以及常用的扩展方法
  11. HDU 3328 Flipper (stack)
  12. Express实例代码分析1——简单的用户验证登录文件
  13. InnoDB引擎体系架构
  14. Spark机器学习(3):保序回归算法
  15. [4G]4G模块的热重启
  16. Linux系统 centOS 更换软件安装源
  17. 27.Remove Element(Array)
  18. 2017百度之星初赛A-1006(HDU-6113)
  19. elasticsearch按范围聚合
  20. Oracle面试题目及解答

热门文章

  1. sftp及两种连接模式简介
  2. Linux下如何查看CPU型号、个数、核数、逻辑CPU数、位数、发行版本、内核信息、内存、服务器生产厂家
  3. nginx_rtmp
  4. 一,Devops核心要点及kubernetes的架构概述
  5. xml配置文件命名空间学习
  6. Django学习系列16:处理完POST请求后重定向
  7. 2017 网易游戏互娱游戏研发4.21(offer)
  8. 【UOJ#37】 [清华集训2014] 主旋律
  9. 使用es6新增Set函数快速数组去重
  10. c# 判断某个类是否实现某个接口