Unity接入ShareSDK的操作详解(Demo)

最近一星期在了解Android接入SDK的过程,之前用Android Studio生成一个简单的jar来实现Unity和Android的相互操作,今天尝试接了下ShareSDK的接入,比预想的容易很多,详细记录一下,也希望对大家有所帮助。

环境:

Unity2018.2.41

夜深模拟器

AndroidSDK 29

JDK

android-ndk-r13b

一 新建Unity项目

    新建项目,我把它命名为ShareSDKTest,然后在MainCamera下新建Canvas,几个Button,一个Text,如下图结构:

Unity接入ShareSDK的操作详解(Demo)_第1张图片

场景中看起来长这样,

Unity接入ShareSDK的操作详解(Demo)_第2张图片

对了,设置一下Canvas->Scale Factor 值为2,Button坐标y轴相隔-50,场景随便弄,能看到就行

点击菜单File>Build Settings 切换到Android平台,修改build system为Internal(默认是gradle,但是用gradle工具打包时,会报一个错,修改成internal就可以正常打包,原因未细究)接着修改PlayerSettings,修改这几个地方,如下所示

Unity接入ShareSDK的操作详解(Demo)_第3张图片

Unity接入ShareSDK的操作详解(Demo)_第4张图片

package name这个名字很重要,很多地方都要修改保持一致(后面会说改哪里),这个是app在程序里面的名字,product name是安装后icon显示给用户看的名字

Unity初步弄完,弄下一步

二 ShareSDK获得App账号

    打开ShareSDK的官网 http://www.mob.com/developer/register?tag=1,正常的操作进行注册,登陆,然后申请开发者资质,大概1个小时审核通过,通过后点击右上角“产品中心”,点击立即进入,如下图

Unity接入ShareSDK的操作详解(Demo)_第5张图片

    然后创建一个应用,名字的话建议和前面Unity的名字一样,叫做“ShareSDKTest”,创建后就可以获得这个应用在ShareSDK的appkey和appsecret

Unity接入ShareSDK的操作详解(Demo)_第6张图片

保存这两个值,随便放在一个txt文本里,方便待会copy

三 下载,放置ShareSDK

    打开这个网址:https://github.com/MobClub/New-Unity-For-ShareSDK,clone下载下来,然后解压,里面有个叫ShareSDK.unitypackage的包,回到unity,点击 Assets=>inprot package 导入这个包。(当然,在git的下载页下有官方的说明,建议先看一遍)点击Main Camera,添加Share SDK作为它的Component,这样ShareSDK就放进Unity里了

四 修改ShareSDK的配置

   ShareSDK导入后需要修改很多地方,注意不要漏了

(1)点击MainCamera,找到ShareSDK脚本组件,填入前面在ShareSDK官网获得的AppKey和AppSecret

Unity接入ShareSDK的操作详解(Demo)_第7张图片

(2)点击ShareSDK.cs,启动Visual Studio,修改ShareSDK脚本的AppKey和AppSecret

Unity接入ShareSDK的操作详解(Demo)_第8张图片

(3)打开AndroidManifest.xml,修改AppKey和AppSecret

Unity接入ShareSDK的操作详解(Demo)_第9张图片

(4)打开AndroidManifest.xml,修改包名

Unity接入ShareSDK的操作详解(Demo)_第10张图片

(5)打开AndroidManifest.xml,修改版本,因为我的Android Studio的安装了这两个版本,所以就改成16 和 29

Unity接入ShareSDK的操作详解(Demo)_第11张图片

(6)打开AndroidManifest.xml,修改Activity的name,就是在.wxapi.WXEntryActivity等3个activity加上package的前缀"com.sdk.sharesdktest"

Unity接入ShareSDK的操作详解(Demo)_第12张图片

五 获得我们app的jar包

    官方说:微信规定WXEntryActivity.java类的位置必须放到 “项目包包名.wxapi” 路径下,需要生成新的jar包,这个可以自己生成,不过我还不太熟悉Android Studio,就找官方客服帮忙了,官方q群:4006852216,跟客服说帮忙生成一个新的DemoCallback.jar,然后报上packamge的名字(比如 com.sdk.sharesdktest),等几分钟就可以收到新的jar,把收到的jar放到Unity项目 Assets=>Plugins=>Android=>libs下

六 编写C#脚本,实现对ShareSDK的调用

    这里我写了一个脚本SDKManager来调用接口,脚本挂载在Main Camera上,把前面创建的 button 和 text 拖拽到脚本组件上面,代码如下:

Unity接入ShareSDK的操作详解(Demo)_第13张图片

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

public class SDKManager : MonoBehaviour {

    public Button smsBtn;
    public Button weChatBtn;
    public Button emailBtn;
    public Button smsContentBtn;
    public Text infoText;
    private ShareSDK ssdk;
    ShareContent content;

    void Start() {
        Init();
        InitBtns();
    }
    
    //获得ShareSDK对象,并且注册分享后的回调
    void Init()
    {
        ssdk = GameObject.Find("Main Camera").GetComponent();
        ssdk.shareHandler = ShareResultHandler;
    }

    //初始化按钮的点击事件
    void InitBtns()
    {
        smsBtn.onClick.AddListener(OnClickTestMsgBtn);
        weChatBtn.onClick.AddListener(OnClickWeChatBtn);
        emailBtn.onClick.AddListener(OnClickEmailBtn);
        smsContentBtn.onClick.AddListener(OnClickShowContentBtn);
    }

    //输出信息到text,这样才知道发生了什么
    void PrintInfo(string info)
    {
        infoText.text = info;
    }

    //测试短信
    void OnClickTestMsgBtn()
    {
        PrintInfo("OnClickTestMsgBtn");
        ssdk.ShowPlatformList(new PlatformType[] { PlatformType.SMS }, GetShareInfo(" SMS "), 100, 100);
    }

    //测试微信
    void OnClickWeChatBtn()
    {
        PrintInfo("OnClickWeChatBtn");
        ssdk.ShowPlatformList(new PlatformType[] { PlatformType.WeChat }, GetShareInfo("we chat"), 100, 100);
    }

    //测试邮件按钮
    void OnClickEmailBtn()
    {
        PrintInfo("OnClickEmailBtn");
        ssdk.ShowPlatformList(new PlatformType[] { PlatformType.Mail }, GetShareInfo("mail"), 100, 100);
    }

    //测试直接打开
    void OnClickShowContentBtn()
    {
        PrintInfo("OnClickShowContentBtn");
        ssdk.ShareContent(PlatformType.SMS, GetShareInfo("SMS"));
    }

    //获得分享的内容结构
    ShareContent GetShareInfo(string platformType)
    {
        ShareContent content = new ShareContent();
        content.SetText("this is a test string.");
        content.SetImageUrl("https://f1.webshare.mob.com/code/demo/img/1.jpg");
        content.SetTitle("test title:" + platformType);
        content.SetTitleUrl("http://www.mob.com");
        content.SetSite("Mob-ShareSDK");
        content.SetSiteUrl("http://www.mob.com");
        content.SetUrl("http://www.mob.com");
        content.SetComment("test description");
        content.SetMusicUrl("http://mp3.mwap8.com/destdir/Music/2009/20090601/ZuiXuanMinZuFeng20090601119.mp3");
        content.SetShareType(ContentType.Webpage);
        return content;
    }


    //分享后的回调
    void ShareResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
    {
        if (state == ResponseState.Success)
        {
            PrintInfo("Success" + MiniJSON.jsonEncode(result));
            print("share result :");
            print(MiniJSON.jsonEncode(result));
        }
        else if (state == ResponseState.Fail)
        {
            PrintInfo("Fail" + MiniJSON.jsonEncode(result));
            PrintInfo(MiniJSON.jsonEncode(result));
            print("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
        }
        else if (state == ResponseState.Cancel)
        {
            PrintInfo("cancel !");
            print("cancel !");
        }
    }
}

七 打包,检查功能

好了,工作准备完了,执行unity的build打包,把打出来的包拖入夜深模拟器,也可以传到自己的手机上安装,最终效果是这样的

一开始界面

Unity接入ShareSDK的操作详解(Demo)_第14张图片

点击smsButton后

Unity接入ShareSDK的操作详解(Demo)_第15张图片

点击smsContenButton后

Unity接入ShareSDK的操作详解(Demo)_第16张图片

回调结果

Unity接入ShareSDK的操作详解(Demo)_第17张图片

希望有所帮助,that‘s it !

你可能感兴趣的:(游戏开发,Unity)