用ShareSDK for Unity分享屏幕截图(android和ios平台)

分享截屏已经是很多游戏应用必备的功能了,找到了一个国内的插件,虽然用起来还行,但是,还是想吐槽下,跟老外的插件比,真的有差距啊有差距啊有差距啊,啊啊啊。

ShareSDK的官方网站:http://www.mob.com/,使用插件需要注册账号获得key,不过,至少现在是免费的。


我的Unity版本是5.3,xcode版本是7.2,ShareSDK版本是2.7.4


Unity


sdk下载地址:https://github.com/MobClub/New-Unity-For-ShareSDK



新建一个简单的工程,点击capture按钮以后会截屏并启用默认分享目录。



导入SDK



在一个GameObject上添加脚本,ShareSDK是官方的脚本,ShareDemo是我写的。



ShareDemo.cs

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

public class ShareDemo : MonoBehaviour
{

	private ShareSDK ssdk;

	// Use this for initialization
	void Start ()
	{
		ssdk = gameObject.GetComponent<ShareSDK> ();
		ssdk.shareHandler = OnShareResultHandler;
	}

	public void Capture ()
	{
		ShareContent content = new ShareContent ();
		content.SetText ("分享text");
		content.SetTitle ("分享title");
		content.SetTitleUrl ("http://www.site.com");
		content.SetSite ("分享site");
		content.SetSiteUrl ("http://http://www.site.com");
		content.SetUrl ("http://http://www.site.com");
		content.SetComment ("分享comment");
		content.SetShareType (ContentType.Image);

		//截屏
		Application.CaptureScreenshot ("Shot4Share.png");
		//设置图片路径
		content.SetImagePath (Application.persistentDataPath + "/Shot4Share.png");

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

	//以下为回调的定义:
	void OnShareResultHandler (int reqID, ResponseState state, PlatformType type, Hashtable result)
	{
		//		if (state == ResponseState.Success)
		//		{
		//			text.text= ("share result :");
		//			text.text= (MiniJSON.jsonEncode(result));
		//		}
		//		else if (state == ResponseState.Fail)
		//		{
		//			text.text =("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
		//		}
		//		else if (state == ResponseState.Cancel) 
		//		{
		//			text.text= ("cancel !");
		//		}
	}
}


去官网注册账号,获得key



修改ShareSDK.cs,令appKey等于正确的key。



Android部分

android的比较简单,唯一要注意的就是,要定制分享平台的时候,是去删文件。(你真是在逗我)

找到plugins/android/sharesdk/libs目录,删除 ShareSDK-平台名字。。.jar文件。



打包编译,运行结果如下,这是全部分享平台都有的



点击其中一个平台



如果,删掉lib文件,定制平台的话是下面的样子



IOS平台

这部分已经不知道如何吐槽了。

首先,修改代码

找到plugins/ios目录下的ShareSDKUnity3DBridge.m文件,



把不需要的平台注释掉



然后,在Unity编辑器中,把不需要的平台去掉



导出到xcode,然后,下载sharesdk的ios插件。

下载地址:http://www.mob.com/#/downloadDetail/ShareSDK/ios



这里下载可以选择,只勾选需要的平台



下载以后,解压得到目录ShareSDK



用xcode打开工程,然后把ShareSDK拖到工程中




选中copy items if needed



找到build settings 下面的Library search paths,看到那个被双引号括起来的目录了吗?去掉双引号。(这真的不是bug么)



找到build phases下的link binary with libraries,按官方说明添加项目(。。。。)




需要添加6、7项



添加完毕



如果你用xcode7,恭喜你,你会看到一个红色的文件名



这个时候,要打开build settings 下的other linker flags




分别添加下面内容,如果不加,会闪退。

-ObjC
-lc++
-lz
-liconv



你以为可以了吗?错,这个时候编译出来的,是英文菜单。。。。。。

所以,要打开info.plist,把默认的英文改成中文,这真的不是bug?真的不是?



经过这一番努力,终于可以编译了,





终于,ok了。

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
正常情况下启动一个Activity,首先需要在AndroidManifest文件中声明,其次需要把该应用安装到手机系统中。 而插件apk是没有正在安装到手机系统中的,也就按照正常的启动流程插件Activity是不能启动的。另外插件apk的类需要加载进来是需要指定ClassLoader。前面的文章也大概讲过,当启动一个插件Activity时,先是用预定义的代理Activity替换目标Activity(及插件Activity)去启动,当AMS处理完回调到应用空间时(及回到运行Activity的进程空间时)再用
从DroidPlugin的官方文档中我们知道。 2 在AndroidManifest.xml中使用插件的com.morgoo.droidplugin.PluginApplication: 或者在自定义的Application的onCreate()函数中,调用PluginHelper.getInstance().applicationOnCreate(getBaseContext()); 在Application的attachBaseContext()函数中,调用 PluginHelper.getInsta

字母雨的实现 - 2016-07-23 14:07:06

有段时间没写博文了,前段时间比较忙,这几天闲下来,想着写点东西,脑袋一下就闪过以前学习Android的时候见到的别人实现的黑客帝国的字母雨效果,当时对于小菜鸟的自己,那叫一个膜拜啊,时隔几年,自己实现一下,算是对以前的自己一个交代吧。 先看效果: 一、实现原理 在实现过程中,主要考虑整个界面由若干个字母组成的子母线条组成,这样的话把固定数量的字母封装成一个字母线条,而每个字母又封装成一个对象,这样的话,就形成了如下组成效果: 字母对象--》字母线条对象--》界面效果 每个字母都应该知道自己的位置坐标,自己

DroidPlugin源码分析Hook过程 - 2016-07-23 14:07:06

插件运行环境初始化过程中我们知道,Hook的初始化是在PluginHelper的initPlugin函数中通过调用PluginProcessManager.installHook来实现的。而在分析DroidPlugin Hook过程之前需要先简单了解一下Java的动态代理。 Java动态代理与之相关的一个类Proxy,一个接口InvocationHandler,一个函数invoke他们之间的关系。就通过DroidPlugin 的BinderHook类的部分代码来解释一下他们的关系; abstract cl
大概半年之前,看过鸿洋大神的一篇博客 Android 自定义控件玩转字体变色 打造炫酷ViewPager指示器 他说大概想了32秒就知道了实现思路,这深深的刺痛了我。最近又看了一遍,决定做点什么 我要自定义的控件是一个盖世英雄, 它不仅仅是一个 Loading控件 ,同时还支持 进度条 (ProgressBar) 功能 。 它会在你需要的时候出现, 它支持 left , top , right , bottom 四个方向加载(变色),最重要的是,它可以是 文字 ,也可以是 图片 ,能够满足开发者一切需求。
首先为权限: uses-permission android:name="android.permission.INTERNET" / uses-permission android:name="com.android.vending.BILLING" / uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" / uses-permission android:name="android.permission.AC
Day01 html与css基础入门 1.html的常见标签和实战 1.1 a标签 a href=#> 1.2 img标签 img src="plmm.jpg" width="100px" height="200px" alt="图片信息丢失!"/// alt属性的值表示当图片找不到时显示的文字信息 1.3 列表标签 ol type="I" start="1" li我是天才1号/li li我是天才2号/li li我是天才3号/li li我是天才4号/li/olul type="circle" li我是逗逼

EventBus 源码分析 - 2016-07-23 14:07:10

0. 前言 EventBus 是一款针对Android优化的发布/订阅事件总线。主要功能是替代 Intent , Handler , BroadCast 在 Fragment , Activity , Service ,线程之间传递消息。优点是开销小,代码更优雅,以及将发送者和接收者解耦。此文将对最新的 EventBus 3.0 的源码进行简要的分析。 1. 用法回顾 EventBus 3.0 的用法较之前的版本有所变化,它使用了最近较为流行的注解形式取代以前的 onEvent 开头作为方法名,但使用步骤

Qt之资源系统 - 2016-07-23 14:07:10

简述 Qt 的资源系统用于存储应用程序的可执行二进制文件,它采用平台无关的机制。当你的程序总需要这样的一系列文件(图标、翻译文件等)并且不想冒丢失某些文件的风险时,这就显得十分有用。 资源系统基于 qmake、rcc(Qt 资源编译器) 和 QFile 之间的紧密合作。 简述 资源集合文件qrc 外部二进制资源 内编译资源 压缩 在程序中使用资源 在库中使用资源 更多参考 资源集合文件(.qrc) 与程序相关的资源在被指定在一个 .qrc 文件中,其基于 XML 的文件格式列出了磁盘上的文件,可以为它们指
一.前提条件 1.纯熟扎实的语言基础   如果你学java,却对反射、泛型、注解一直半解,还是不要去读什么框架了,回去把java基础打扎实反而对你自身更有益。 2.UML能力   在软件工程中,UML在软件的不同生命周期阶段扮演着非常重要的角色,没有好的UML水平,面对大型的项目源码会束手无策。 3.对业务的理解   如果你要阅读的项目业务性比较强,事先对业务有一定的了解是必须的。 4.设计模式、重构的掌握   编程语言什么的没什么好说。着重提一个:设计模式由于Android源代码用到各种各样的设计模式,