乐趣区

关于前端: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<ShareSDK>();
//        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);
    }

    /// <summary>
    /// 受权回调
    /// </summary>
    /// <param name="reqID">Req I.</param>
    /// <param name="state">State.</param>
    /// <param name="type">Type.</param>
    /// <param name="result">Result.</param>
    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 !");
        }
    }

    /// <summary>
    /// 获取用户信息回调
    /// </summary>
    /// <param name="reqID">Req I.</param>
    /// <param name="state">State.</param>
    /// <param name="type">Type.</param>
    /// <param name="result">Result.</param>
    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 !");
        }
    }

    /// <summary>
    /// 分享后果回调
    /// </summary>
    /// <param name="reqID">Req I.</param>
    /// <param name="state">State.</param>
    /// <param name="type">Type.</param>
    /// <param name="result">Result.</param>
    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 !");
        }
    }

    /// <summary>
    /// 获取好友列表回调
    /// </summary>
    /// <param name="reqID">Req I.</param>
    /// <param name="state">State.</param>
    /// <param name="type">Type.</param>
    /// <param name="result">Result.</param>
    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)微信缓存了之前的错误信息,造成闪退,这点个别不会呈现,但也可能,不过概率极小,为了放弃测试的胜利性,能够先革除微信缓存后,在开发利用分享性能。

退出移动版