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

写在前面

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

叙述

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

配置sdk

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

    SDK包具体地址为:http://www.mob.com/downloadDetail/ShareSDK/android
    点击SDK下载即可,下载前会提示选择集成自己需要的第三方登录平台。
    在下载完成的文件夹中目录结构如下:

    ShareSDK包目录.

  • 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);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值