ShareSDK 安装教程

一、ShareSDK简介

ShareSDK是一种社会化分享组件,为iOS、Android、WP8 的APP提供社会化功能,集成了一些常用的类库和接口,缩短开发者的开发时间,还有社会化统计分析管理后台。ShareSDK移动开发者服务平台由广州掌淘网络科技有限公司开发。
官方地址:http://www.mob.com/

ShareSDK支持包括QQ、微信、新浪微博、开心网、人人网、豆瓣、网易微博、搜狐微博、facebook、twitter、google+等国内外40多家的主流社交平台(如图所示),帮助开发者轻松实现社会化分享、登录、关注、获得用户资料、获取好友列表等主流的社会化功能,强大的统计分析管理后台,可以实时了解用户、信息流、回流率、传播效率等数据,有效地指导移动APP的日常运营与推广,同时为APP引入更多的流量。

ShareSDK强大功能:
集成快捷,操作简单40多家主流社交网络,无论是开发还是维护,都需要巨大的工作量才能完成,使用ShareSDK只需要3分钟即可集成完成。评论和赞功能可以直接通过第三方登录,发表评论和赞插件稳定,安装包小每个开放平台的库包是独立的,开发者可根据需求添加,极大的减小APP体积,使分享内容更稳定。适配专用游戏引擎Cocos2d-x;Unity3D;ANE;Java Script的专用游戏引擎社会化分享社会化统计分析标准、专业的统计分析后台,实时了解SNS、用户、信息流、转化率、传播效应等基本数据,新增自定义短链、“评论和赞”板块,有效指导日常运营与推广。

二、准备工作

(一)环境搭建(Mac版)

Unity3D: 2017.4.10f1
JDK: 1.8.0_40
SDK:
SDKTools: 25.2.5
buildTools: 28.0.2
platformTools: 28.0.1
Eclipse: Oxygen.3a Release (4.7.3a)
安装可参见链接:
1、https://blog.csdn.net/u011151...
2、https://blog.csdn.net/YuanLiY...
ShareSDK: 3.2.1

由于Mob提供的平台较多,本章节选取以基于Unity引擎Android平台微信分享SDK为例,进行讲解。

(二)Mob官方操作

1、获取AppKey
如何在Mob官网注册应用得到appkey,请点击链接看里面的操作步骤。

2、下载SDK
3、下载ShareSDK的Unity3D工具类
打开Github下载
GitHub - MobClub/New-Unity-For-ShareSDK: New sample of ShareSDK for Unity, including ios and android.
下载完成之后,进行解压缩,文件结构如图2所示:

(三)微信开放平台官方操作

1、获取AppKey
首先注册微信开放平台账号(开发者资质可在之后验证, 地址:),
微信开放平台 (qq.com)

注册完成进行登录,登录之后,点击导航栏 “管理中心” 选项,即可进行应用创建,如下第一张图所示。
点击创建移动应用按钮,跳转应用信息界面,按照引导填写相关信息,填写完成进行提交即可,接下来的时间就是等待微信开放平台的审核结果啦。如下第二张图所示。


注意:这里应用包名非常重要,要注意填写。
应用包名: 采用反写域名命名规则,即http://com.xx.xxx形式;
使用包名(Package Name)作为应用的唯一标识。即:包名必须唯一,一个包名代表一个应用,不允许两个应用使用同样的包名。包名主要用于系统识别应用,几乎不会被最终用户看到。 因为包名是唯一标识,所以为了避免与其他应用的包名重复产生冲突,您可以这样命名:将您的域名反转过来作为前缀,比如如果您的域名是http://zan.com,那么包名可以用com.zan开头,这样可以有效的避免重复 在后面增加描述产品名称的字符,比如果果您的应用是视频应用,可以命名为com.zan.video;如果您没有域名,可以使用自己的邮箱作为前缀,比如 com.163.WoDeYouXiang。简单说,自己定义一个开发应用的包名;这个包名必须唯一性。一般采用反写域名命名规则。

审核通过后,点击查看,即可获取应用的AppID 与 AppSecret啦, 如下图所示:

至此,所有准备工作已完成

三、ShareSDK接入流程

1、导入ShareSDK
创建Unity3D工程,双击或导入ShareSDK.unitypackage导入相关文件(导入时,只需导入所用平台Jar包以及相关依赖文件即可,避免因为Jar包导致无关平台图标出现)。 注意该操作可能会覆盖您原来已经存在的文件!
导入后如下第一张图,第二张图所示,ShareSDK目录下的AndroidManifest.xml中的包名(package)改成您自己的项目的包名;


2、创建场景
创建并保存场景,在场景中添加一些3D游戏对象,作为场景内容,如下图所示。

也可在场景中创建UI元素,用于点击按钮进行分享,亦或是显示分享反馈信息(本文作为示例工程,将直接采用GUI进行UI创建以及布局)。
3、逻辑处理
首先,打开ShareSDKDevInfo 文件,把不需要分享的平台给注释掉,方便在面板上进行配置,如下图所示。


其次,创建一个游戏对象或者选择场景中的某个游戏对象,挂载Share SDK.cs脚本,将之前获取的Mob平台AppID/AppSecret以及WeChat平台AppID/AppSecret填入以下对应文本框中。如下图所示:

注意:上图中如勾选了BypassApproval,则在分享时会绕过微信验证,但是功能不全,只能以图文方式进行分享。

最后,进行自定义逻辑编写,创建Demo.cs文件,双击打开,编写以下逻辑:

using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using cn.sharesdk.unity3d;

public class Demo : MonoBehaviour {

    private ShareSDK ssdk;

    // Use this for initialization
    void Start ()
    {    
        ssdk = this.gameObject.GetComponent();
//        ssdk.authHandler = OnAuthResultHandler;
        ssdk.shareHandler = OnShareResultHandler;
//        ssdk.showUserHandler = OnGetUserInfoResultHandler;
//        ssdk.getFriendsHandler = OnGetFriendsResultHandler;
//        ssdk.followFriendHandler = OnFollowFriendResultHandler;
    }

    // Update is called once per frame
    void Update () 
    {
        if (Input.GetKeyDown(KeyCode.Escape)) {
            Application.Quit();
        }
    }
    
    void OnGUI ()
    {
        if (GUI.Button(new Rect(100, 100, 300, 200), "Share"))
        {
            //屏幕截图,将会存储在Application.persistentDataPath + "/Shot.png"位置
//            ScreenCapture.CaptureScreenshot ("Shot.png");

            //开启协程
//            StartCoroutine (ShareToWeChat());

            ShareToWeChat ();
        }
    }

    //分享操作
    void ShareToWeChat(){
        //等待截图完成,0.5秒后继续下面的操作
//        yield return new WaitForSeconds (0.5f);

        //获取到刚刚的截图路径
//        string imgPath = Application.persistentDataPath + "/Shot.png";

        //创建分享内容实例
        ShareContent content = new ShareContent ();

        //设置分享内容的text
        content.SetText ("This is a Test!");

        //设置分享内容的本地图片;如果想加载网络上的图片,可以使用content.SetImageUrl(string URL)方法来设置图片
//        content.SetImagePath (imgPath);
        content.SetImageUrl("http://ww3.sinaimg.cn/mw690/be159dedgw1evgxdt9h3fj218g0xctod.jpg");

        //设置分享所链接到的网页地址
        content.SetUrl ("http://www.ztsskj.com/");

        //设置分享的标题
        content.SetTitle("test title");

        //设置分享的内容类型
        content.SetShareType (ContentType.Webpage);

        //多平台选择,以下语句使得按钮被点击以后会弹出选择分享平台的面板,
        //面板上的显示的平台可以使用PlatformType[] platforms来自己定义,如果sharesdk.ShowPlatformList的
        //第一个参数为null,则会显示ShareSDK支持的所有平台以供选择
        //PlatformType[] platforms = { PlatformType.WeChat, PlatformType.WeChatMoments };
        //sharesdk.ShowPlatformList(platforms, content, 0, 0);

        //单一分享,此语句指示在点击按钮以后直接弹出微信好友分享,若PlatformType.WeChatMoments则为朋友圈分享
//        ssdk.ShowShareContentEditor(PlatformType.WeChat, content);

        ssdk.ShowPlatformList (null, content, 100, 100);
    }

    /// 
    /// 授权回调
    /// 
    /// Req I.
    /// State.
    /// Type.
    /// Result.
    void OnAuthResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
    {
        if (state == ResponseState.Success)
        {
            if (result != null && result.Count > 0) {
                print ("authorize success !" + "Platform :" + type + "result:" + MiniJSON.jsonEncode(result));
            } else {
                print ("authorize success !" + "Platform :" + type);
            }
        }
        else if (state == ResponseState.Fail)
        {
            #if UNITY_ANDROID
            print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
            #elif UNITY_IPHONE
            print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
            #endif
        }
        else if (state == ResponseState.Cancel) 
        {
            print ("cancel !");
        }
    }

    /// 
    /// 获取用户信息回调
    /// 
    /// Req I.
    /// State.
    /// Type.
    /// Result.
    void OnGetUserInfoResultHandler (int reqID, ResponseState state, PlatformType type, Hashtable result)
    {
        if (state == ResponseState.Success)
        {
            print ("get user info result :");
            print (MiniJSON.jsonEncode(result));
            print ("AuthInfo:" + MiniJSON.jsonEncode (ssdk.GetAuthInfo (PlatformType.QQ)));
            print ("Get userInfo success !Platform :" + type );
        }
        else if (state == ResponseState.Fail)
        {
            #if UNITY_ANDROID
            print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
            #elif UNITY_IPHONE
            print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
            #endif
        }
        else if (state == ResponseState.Cancel) 
        {
            print ("cancel !");
        }
    }

    /// 
    /// 分享结果回调
    /// 
    /// Req I.
    /// State.
    /// Type.
    /// Result.
    void OnShareResultHandler (int reqID, ResponseState state, PlatformType type, Hashtable result)
    {
        if (state == ResponseState.Success)
        {
            print ("share successfully - share result :");
            print (MiniJSON.jsonEncode(result));
        }
        else if (state == ResponseState.Fail)
        {
            #if UNITY_ANDROID
            print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
            #elif UNITY_IPHONE
            print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
            #endif
        }
        else if (state == ResponseState.Cancel) 
        {
            print ("cancel !");
        }
    }

    /// 
    /// 获取好友列表回调
    /// 
    /// Req I.
    /// State.
    /// Type.
    /// Result.
    void OnGetFriendsResultHandler (int reqID, ResponseState state, PlatformType type, Hashtable result)
    {
        if (state == ResponseState.Success)
        {            
            print ("get friend list result :");
            print (MiniJSON.jsonEncode(result));
        }
        else if (state == ResponseState.Fail)
        {
            #if UNITY_ANDROID
            print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
            #elif UNITY_IPHONE
            print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
            #endif
        }
        else if (state == ResponseState.Cancel) 
        {
            print ("cancel !");
        }
    }

    void OnFollowFriendResultHandler (int reqID, ResponseState state, PlatformType type, Hashtable result)
    {
        if (state == ResponseState.Success)
        {
            print ("Follow friend successfully !");
        }
        else if (state == ResponseState.Fail)
        {
            #if UNITY_ANDROID
            print ("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
            #elif UNITY_IPHONE
            print ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
            #endif
        }
        else if (state == ResponseState.Cancel) 
        {
            print ("cancel !");
        }

逻辑编写完成,将脚本挂载至Main Camera上,接下来就可以进行打包测试了!

四、ShareSDK测试

在进行打包时,请确认当前微信开放平台包名、ShareSDK目录下的AndroidManifest.xml以及下图15所示的Package Name一致。

将打包得到的APK文件安装至安卓手机,并安装签名工具,打开签名工具,输入工程包名,即可获取相应的应用签名,将获取的应用签名填写至微信开放平台,如下两图所示。


至此,所有设置已结束,测试结果如下图18所示:

上图中红色箭头所指处“TapManMan”是项目中使用的微信开放平台的appkey对应的应用名,微信自动添加。

五、ShareSDK总结

在进行ShareSDK微信分享安装时,并不是那么顺利,在此总结接入过程需要注意的点。
1、全程需要关注所使用的应用包名必须一致(微信开放平台应用包名, AndroidManifest.xml文件应用包名、打包时Package Name对应的应用包名)。

2、使用签名工具获取应用签名,并将签名填写至微信开放平台。

3、进行APK测试时,有可能不能够成功拉起微信界面,进行相关分享操作,效果体现为:闪退。在此,可采取以下措施:
(1)检查以上两项(1、 2)是否有误
(2)微信缓存了之前的错误信息,造成闪退,这点一般不会出现,但也可能,不过概率极小,为了保持测试的成功性,可以先清除微信缓存后,在开发应用分享功能。

你可能感兴趣的:(ShareSDK 安装教程)