集成ShareSdk一键分享和第三方登录

Posted 码上加油站

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集成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)方法,删除可能的授权缓存数据


 

以上是关于集成ShareSdk一键分享和第三方登录的主要内容,如果未能解决你的问题,请参考以下文章

使用ShareSDK完成第三方(QQ微信微博)登录和分享

Android-友盟第三方登录与分享

iOS - ShareSDK第三方分享(图文和视频)和登录

iOS集成ShareSDK微博分享遇到问题 新浪微博登录redirect_uri_mismatch

android shareSDK实现第三方分享

iOS:shareSDK第三方登录