ShareSDK接入实现微信分享功能
首先需要去Mob官网(http://www.mob.com/)下载shareSDK For Unity3d
下载完成,解压,将以下plugins文件夹移入Unity项目的Assets文件夹里,并将项目平台转换为安卓平台
在场景里创建几个cube作为场景内容,创建一个button作为分享按钮,最后创建一个text来显示分享返回信息
为场景内的摄像机(或者其他任意gameobject)添加ShareSDK脚本,同时创建一个demo脚本挂在摄像机上
ShareSDK脚本需要填写AppKey和AppSecret,可以去mob平台官网注册一个账号,添加一个应用后获得。接下来需要开启我们想使用的分享平台关闭我们不需要使用的分享平台,如图,当某个平台不勾选enable时,无法使用这个平台的分享功能,本例使用微信分享,因此关闭了其他的平台(注:相关平台需要Appkey和AppSecret需要注册获得,例如微信则需要去注册微信开放平台获得)
上图中如勾选了BypassApproval,则在分享时会绕过微信验证,但是功能不全,只能一图片方式分享图片(这样是否就不需要微信提供的Appkey和AppSecret呢?暂时未验证)。
以上设置准备工作做完就可以开始编辑我们的代码了。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using cn.sharesdk.unity3d;
using UnityEngine.UI;
public class demo : MonoBehaviour {
public ShareSDK sharesdk;
private string objectname;
public Text text;
public Button button;
// Use this for initialization
void Start () {
//获取到ShareSDK脚本组件
sharesdk = GetComponent<ShareSDK>();
//获取到场景的Text用以显示信息
text = GameObject.Find("Text").GetComponent<Text>();
//获取到场景的button用以执行分享操作
button = GameObject.Find("Button").GetComponent<Button>();
//设置分享后的回调
sharesdk.shareHandler = OnShareResultHandler;
//为button挂载事件
button.onClick.AddListener(delegate
{
//屏幕截图,将会存储在Application.persistentDataPath + "/ScreenShot.png"位置
Application.CaptureScreenshot("Shot.png");
text.text = "正在截图";
//开启协程
StartCoroutine(JiePingTime());
});
}
//分享操作完成后的回调函数;参数:请求的id,操作后状态,分享的平台,返回的数据
void OnShareResultHandler(int repID,ResponseState state ,PlatformType type,Hashtable response)
{
//如果分享操作成功
if(state==ResponseState.Success)
{
text.text = "分享成功!";
}
//如果分享操作失败
else if (state == ResponseState.Fail)
{
text.text = "失败!";
}
//如果取消了分享操作
else if (state == ResponseState.Cancel)
{
text.text = "取消!";
}
}
//协程,执行分享操作
private IEnumerator JiePingTime()
{
//等待截图完成,0.5秒后继续下面的操作
yield return new WaitForSeconds(0.5f);
//获取到刚刚的截图路径
string path = Application.persistentDataPath + "/Shot.png";
//创建分享内容实例
ShareContent content = new ShareContent();
//设置分享内容的text
content.SetText("这是SetText方法");
//设置分享内容的本地图片;如果想加载网络上的图片,可以使用content.SetImageUrl(string URL)方法来设置图片
content.SetImagePath(path);
//设置分享所链接到的网页地址
content.SetUrl("http://www.baidu.com/");
//设置分享的标题
content.SetTitle("这是SetTitle方法");
//设置分享的内容
//ContentType.Auto为根据以上设置自动设置类型
//也可以ContentType.Image/ContentType.Music/ContentType.Video......等等来自己设置分享的类型
content.SetShareType(ContentType.Auto);
//多平台选择,以下语句使得按钮被点击以后会弹出选择分享平台的面板,
//面板上的显示的平台可以使用PlatformType[] platforms来自己定义,如果sharesdk.ShowPlatformList的
//第一个参数为null,则会显示ShareSDK支持的所有平台以供选择
//PlatformType[] platforms = { PlatformType.WeChat, PlatformType.WeChatMoments };
//sharesdk.ShowPlatformList(platforms, content, 0, 0);
//单一分享,此语句指示在点击按钮以后直接弹出微信好友分享,若PlatformType.WeChatMoments则为朋友圈分享
sharesdk.ShowShareContentEditor(PlatformType.WeChat, content);
}
}
编写完脚本以后,就可以把项目发布成apk进行测试了。注:在发布apk时使用的包名和签名,要和项目中所用的微信开放平台给的appkey所对应的包名和签名一致。测试结果如下:
上图中黄圈里面的“虫虫总动员2018”是项目中使用的微信开放平台的appkey对应的应用名,微信自动给添加。
但是在测试时发现回调函数并没有执行,如图:
屏幕中间的text并没有显示回调函数里面的信息,说明回调函数没有执行,为此,我们还需要设置安卓配置文件并且修改DemoCallback.jar包。
首先,修改安卓配置文件,如图
将上图中红框里的包名改为使用的微信开放平台appkey所对应的包名。
然后修改DemoCallback.jar包,如图:
将这个jar包导入eclipse,然后修改包名为使用的微信开放平台appkey所对应的包名,导出,替换掉项目里的jar包以后即可实现回调(注:本例只使用了微信分享功能,故在libs文件夹里将其他平台的jar包删除,只留下了微信分享相关的jar包和shareSDK必须的jar包(结果如图),不需要的平台jar包可以删除,并且有一个telegram平台分享在使用sharesdk.ShowPlatformList方法时会自己出现,无法在shareSDK组件里取消enable勾选来关闭,故不想显示这个平台的话需要手动删除telegram平台的jar包)。