可在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();
}