可在Asset Store上找到: https://assetstore.unity.com/packages/tools/integration/native-share-for-android-ios-112731
论坛线程: https://forum.unity.com/threads/native-share-for-android-ios-open-source.519865/
不和谐: https://discord.gg/ujjt549aav
支持开发人员☕
该插件可帮助您在Android&iOS上本地共享文件(图像,视频,文档等)和/或纯文本。 content -provider用于在Android上共享媒体。
有5种安装此插件的方法:
"com.yasirkula.nativeshare": "https://github.com/yasirkula/UnityNativeShare.git",
openupm add com.yasirkula.nativeshare
Anticeshare不再需要在Android上进行任何手动设置。如果您使用插件的较旧版本,则需要从AndroidManifest.xml中删除Anticeshare的<provider ... />
。
供参考,可遗产文档可在以下网址提供:https://github.com/yasirkula/unitynativehare/wiki/manual-setup-for-for-for-for-android
有两种方法可以在iOS上设置插件:
只需创建一个新的Anticthare对象,然后按照您的意愿链接以下函数来自定义(请参阅示例代码):
Clear()
:清除先前设置的共享内容(如果有)。仅在将同一Antivehare实例重复使用以提高内存效率时有用SetSubject( string subject )
:设置主题(主要用于电子邮件应用程序)SetText( string text )
:设置共享文本。请注意,如果存在,Facebook应用程序将省略文本(请参阅此主题)SetUrl( string url )
:设置共享URL。在支持的iOS应用程序上,该URL用于生成目标网页的预览。其他iOS应用程序可能会将URL附加到文本上或省略。在iOS上共享文件或在Android上共享任何内容时,将URL附加到文本上(除非文本已经包含URL)AddFile( string filePath, string mime = null )
:将文件添加到共享操作的路径上。您可以添加不同类型的多个文件。文件的哑光将自动确定如果剩余空;但是,如果文件没有扩展名和/或您已经知道文件的哑光,则可以手动输入哑剧。哑剧对iOS没有影响AddFile( Texture2D texture, string createdFileName = "Image.png" )
:将纹理保存到application.temporaryCachepath带有指定的文件名,并将图像文件添加到共享操作中AddEmailRecipient( string emailAddress )
:自动填充Android平台上电子邮件应用程序的接收器字段。对iOS没有影响SetTitle( string title )
:在Android平台上设置“共享”对话框的标题。对iOS没有影响AddTarget( string androidPackageName, string androidClassName = null )
:在Android平台上的特定应用程序上共享内容。如果AndroidClassName剩下null,则共享对话框中的活动列表将范围缩小到可以处理此共享诉讼的指定AndroidPackageName中的活动。请注意,AndroidClassName(如果提供)必须是活动的全名(带有包装)。您可以多次调用此功能。此功能对iOS没有影响SetCallback( ShareResultCallback callback )
:在共享操作完成后调用回调功能。 SharerEsultCallback具有以下签名: void ShareResultCallback( ShareResult result, string shareTarget )
ShareResult result
可以采用3个值:string shareTarget
存储用户从共享表中选择的应用程序的信息。如果没有提供此信息,则可以为空或空。通常,这是所选应用程序的软件包名称/类名。您可以使用此值来确定用户是否从共享表中选择了Twitter: shareTarget != null && shareTarget.ToLowerInvariant().Contains( "twitter" )
最后,调用本地对象的共享功能将呈现股票表。
bool NativeShare.TargetExists( string androidPackageName, string androidClassName = null )
:返回Android设备上是否存在具有指定软件包/类名称的应用程序。如果AndroidClassName的null为null,则只需查询软件包名称。此功能总是在iOS上返回bool FindTarget( out string androidPackageName, out string androidClassName, string packageNameRegex, string classNameRegex = null )
:使用正则表达式在Android设备上找到安装应用程序的包/类名称。如果成功找到匹配的软件包/类名称,则返回true。当您要使用addTarget函数时,可能会很有用,但不知道目标活动的确切包/类名称。如果ClassNamereGex剩下null,则返回匹配软件包中的第一个活动。此功能总是在iOS上返回false 在Android上,您可以通过AddTarget在特定的应用程序上共享。对于iOS,您可以查看这篇文章,看看它是否适合您:https://forum.unity.com/threads/native-share-for-for-android-ios-open-source.519865/page-4#post -4011874
只是无法与某些应用程序(例如Facebook)上的文本/主题共享图像/文件,他们故意省略了图像或共享内容中的文本。这些应用程序要求您使用自己的SDK进行复杂的共享操作。为了获得最佳兼容性,我建议您仅分享图像或文本。
由于新的软件包可见性更改,Antianthare将<queries>
元素添加到AndroidManifest.xml。可以通过以下步骤来解决构建错误:Android 11,Android 12。在最坏的情况下,如果您可以使用Anticenthare不适用于某些受影响的设备,那么您可以打开Antiantshare.aar ,使用Winrar或7-zip然后从androidmanifest.xml删除<queries>...</queries>
元素。
如果您要在单独的过程中运行Unity活动,则在Anticationhare.aar中修改AndroidManifest.xml ,以便NativeShareCustomShareDialogActivity
和NativeShareBroadcastListener
也在相同的过程中运行,例如:
< activity android : name = " .NativeShareCustomShareDialogActivity " ... android : process = " :YourProcess " />
< receiver android : name = " .NativeShareBroadcastListener " ... android : process = " :YourProcess " />
如果您确定插件是最新的,请从播放器设置启用自定义Proguard文件选项,并将以下行添加到该文件: -keep class com.yasirkula.unity.* { *; }
将NativeShareNamespace.NSShareResultCallbackAndroid
添加到obfuscator设置资产的Skip Classes
部分。
以下代码每当您点击屏幕时捕获游戏的屏幕截图,将其保存在临时路径中,然后分享:
void Update ( )
{
if ( Input . GetMouseButtonDown ( 0 ) )
StartCoroutine ( TakeScreenshotAndShare ( ) ) ;
}
private IEnumerator TakeScreenshotAndShare ( )
{
yield return new WaitForEndOfFrame ( ) ;
Texture2D ss = new Texture2D ( Screen . width , Screen . height , TextureFormat . RGB24 , false ) ;
ss . ReadPixels ( new Rect ( 0 , 0 , Screen . width , Screen . height ) , 0 , 0 ) ;
ss . Apply ( ) ;
string filePath = Path . Combine ( Application . temporaryCachePath , " shared img.png " ) ;
File . WriteAllBytes ( filePath , ss . EncodeToPNG ( ) ) ;
// To avoid memory leaks
Destroy ( ss ) ;
new NativeShare ( ) . AddFile ( filePath )
. SetSubject ( " Subject goes here " ) . SetText ( " Hello world! " ) . SetUrl ( " https://github.com/yasirkula/UnityNativeShare " )
. SetCallback ( ( result , shareTarget ) => Debug . Log ( " Share result: " + result + " , selected app: " + shareTarget ) )
. Share ( ) ;
// Share on WhatsApp only, if installed (Android only)
//if( NativeShare.TargetExists( "com.whatsapp" ) )
// new NativeShare().AddFile( filePath ).AddTarget( "com.whatsapp" ).Share();
}