最近一星期在了解Android接入SDK的过程,之前用Android Studio生成一个简单的jar来实现Unity和Android的相互操作,今天尝试接了下ShareSDK的接入,比预想的容易很多,详细记录一下,也希望对大家有所帮助。
环境:
Unity2018.2.41
夜深模拟器
AndroidSDK 29
JDK
android-ndk-r13b
新建项目,我把它命名为ShareSDKTest,然后在MainCamera下新建Canvas,几个Button,一个Text,如下图结构:
场景中看起来长这样,
对了,设置一下Canvas->Scale Factor 值为2,Button坐标y轴相隔-50,场景随便弄,能看到就行
点击菜单File>Build Settings 切换到Android平台,修改build system为Internal(默认是gradle,但是用gradle工具打包时,会报一个错,修改成internal就可以正常打包,原因未细究)接着修改PlayerSettings,修改这几个地方,如下所示
package name这个名字很重要,很多地方都要修改保持一致(后面会说改哪里),这个是app在程序里面的名字,product name是安装后icon显示给用户看的名字
Unity初步弄完,弄下一步
打开ShareSDK的官网 http://www.mob.com/developer/register?tag=1,正常的操作进行注册,登陆,然后申请开发者资质,大概1个小时审核通过,通过后点击右上角“产品中心”,点击立即进入,如下图
然后创建一个应用,名字的话建议和前面Unity的名字一样,叫做“ShareSDKTest”,创建后就可以获得这个应用在ShareSDK的appkey和appsecret
保存这两个值,随便放在一个txt文本里,方便待会copy
打开这个网址:https://github.com/MobClub/New-Unity-For-ShareSDK,clone下载下来,然后解压,里面有个叫ShareSDK.unitypackage的包,回到unity,点击 Assets=>inprot package 导入这个包。(当然,在git的下载页下有官方的说明,建议先看一遍)点击Main Camera,添加Share SDK作为它的Component,这样ShareSDK就放进Unity里了
ShareSDK导入后需要修改很多地方,注意不要漏了
(1)点击MainCamera,找到ShareSDK脚本组件,填入前面在ShareSDK官网获得的AppKey和AppSecret
(2)点击ShareSDK.cs,启动Visual Studio,修改ShareSDK脚本的AppKey和AppSecret
(3)打开AndroidManifest.xml,修改AppKey和AppSecret
(4)打开AndroidManifest.xml,修改包名
(5)打开AndroidManifest.xml,修改版本,因为我的Android Studio的安装了这两个版本,所以就改成16 和 29
(6)打开AndroidManifest.xml,修改Activity的name,就是在.wxapi.WXEntryActivity等3个activity加上package的前缀"com.sdk.sharesdktest"
官方说:微信规定WXEntryActivity.java类的位置必须放到 “项目包包名.wxapi” 路径下,需要生成新的jar包,这个可以自己生成,不过我还不太熟悉Android Studio,就找官方客服帮忙了,官方q群:4006852216,跟客服说帮忙生成一个新的DemoCallback.jar,然后报上packamge的名字(比如 com.sdk.sharesdktest),等几分钟就可以收到新的jar,把收到的jar放到Unity项目 Assets=>Plugins=>Android=>libs下
这里我写了一个脚本SDKManager来调用接口,脚本挂载在Main Camera上,把前面创建的 button 和 text 拖拽到脚本组件上面,代码如下:
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打包,把打出来的包拖入夜深模拟器,也可以传到自己的手机上安装,最终效果是这样的
一开始界面
点击smsButton后
点击smsContenButton后
回调结果
希望有所帮助,that‘s it !