Verfügbar im Asset Store: https://assetstore.unity.com/packages/tools/integration/native-share-for-android-ios-112731
Forum Thread: https://forum.unity.com/threads/native-share-for-android-ios-open-source.519865/
Discord: https://discord.gg/ujjt549aav
Unterstützen Sie den Entwickler ☕
Dieses Plugin hilft Ihnen dabei, Dateien (Bilder, Videos, Dokumente usw.) und/oder einen einfachen Text auf Android & iOS zu teilen. Ein ContentProvider wird verwendet, um die Medien auf Android zu teilen.
Es gibt 5 Möglichkeiten, dieses Plugin zu installieren:
"com.yasirkula.nativeshare": "https://github.com/yasirkula/UnityNativeShare.git",
openupm add com.yasirkula.nativeshare
NativeShare benötigt keine manuelle Einrichtung mehr auf Android. Wenn Sie eine ältere Version des Plugins verwendet haben, müssen Sie Nativeshare <provider ... />
aus Ihrem AndroidManifest.xml entfernen.
Als Referenz finden Sie die Legacy-Dokumentation unter: https://github.com/yaasirkula/unitynativeshare/wiki/Manual-setup-for-forstroid
Es gibt zwei Möglichkeiten, das Plugin auf iOS einzurichten:
Erstellen Sie einfach ein neues NativeShare -Objekt und passen Sie es an, indem Sie die folgenden Funktionen wie Sie möchten (siehe Beispielcode):
Clear()
: Löscht den zuvor festgelegten Freigabe -Inhalt (falls vorhanden). Nur nützlich, wenn die gleiche NativeShare -Instanz zur Erinnerungseffizienz wiederverwendet wirdSetSubject( string subject )
: Legt das Subjekt fest (hauptsächlich in E-Mail-Anwendungen)SetText( string text )
: Legt den freigegebenen Text fest. Beachten Sie, dass die Facebook -App, falls vorhanden, Text weglassen wird (siehe dieses Thema)SetUrl( string url )
: Legt die freigegebene URL fest. Bei unterstützten iOS -Apps wird diese URL verwendet, um eine Vorschau der Zielwebseite zu generieren. Andere iOS -Apps können die URL an den Text anhängen oder weglassen. Während der Freigabe einer Datei auf iOS oder beim Teilen von Android wird die URL an den Text angehängt (es sei denn, der Text enthält bereits die URL)AddFile( string filePath, string mime = null )
: Fügt die Datei unter Pfad der Aktion zu teilen. Sie können mehrere Dateien verschiedener Typen hinzufügen. Die Mime der Datei wird automatisch ermittelt, wenn sie null gelassen wird. Wenn die Datei jedoch keine Erweiterung hat und/oder Sie bereits die Mime der Datei kennen, können Sie die MIME manuell eingeben. MIME hat keinen Einfluss auf iOSAddFile( Texture2D texture, string createdFileName = "Image.png" )
: Speichert die Textur in der Anwendung.AddEmailRecipient( string emailAddress )
: Das Empfängerfeld der E-Mail-Anwendungen auf Android-Plattform automatisch. Hat keinen Einfluss auf iOSSetTitle( string title )
: Legt den Titel des Dialogfelds zum Freigeben auf Android -Plattform fest. Hat keinen Einfluss auf iOSAddTarget( string androidPackageName, string androidClassName = null )
: teilt Inhalte auf einer bestimmten Anwendung auf Android -Plattform. Wenn AndroidClassName null bleibt, wird die Liste der Aktivitäten im Aktiendialog auf die Aktivitäten im angegebenen Androidpackagenamen beschränkt, mit denen diese Aktion behandelt werden kann. Beachten Sie, dass AndroidClassName, falls angegeben, der vollständige Name der Aktivität (mit seinem Paket) sein muss. Sie können diese Funktion mehrmals aufrufen. Diese Funktion hat keinen Einfluss auf iOSSetCallback( ShareResultCallback callback )
: Ruft die Rückruffunktion nach Abschluss der Freigabeaktion auf. Shareresultcallback hat die folgende Unterschrift: void ShareResultCallback( ShareResult result, string shareTarget )
ShareResult result
kann 3 Werte erfordern:string shareTarget
speichert Informationen über die App, die der Benutzer aus dem Share -Blatt ausgewählt hat. Es kann null oder leer sein, wenn diese Informationen nicht bereitgestellt werden. Normalerweise ist dies der Paketame/Klassenname der ausgewählten Anwendung. Sie können diesen Wert verwenden, um zu bestimmen, ob der Benutzer Twitter aus dem Share -Blatt ausgewählt hat: shareTarget != null && shareTarget.ToLowerInvariant().Contains( "twitter" )
Schließlich präsentiert das Aufrufen der Aktien () -Funktion des NativesHare -Objekts das Share -Blatt.
bool NativeShare.TargetExists( string androidPackageName, string androidClassName = null )
: Gibt zurück, ob die Anwendung mit dem angegebenen Paket-/Klassennamen auf dem Android -Gerät vorhanden ist. Wenn AndroidClassName null bleibt, wird nur der Paketname abgefragt. Diese Funktion kehrt immer auf iOS zurückbool FindTarget( out string androidPackageName, out string androidClassName, string packageNameRegex, string classNameRegex = null )
: Findet den Paket-/Klassennamen einer installierten Anwendung auf dem Android -Gerät mit regulären Ausdrücken. Gibt true zurück, wenn ein passender Paket-/Klassenname erfolgreich gefunden wird. Kann nützlich sein, wenn Sie die AddTarget -Funktion verwenden möchten, aber den genauen Paket-/Klassennamen der Zielaktivität nicht kennen. Wenn classnamereGex Null bleibt, wird die erste Aktivität im passenden Paket zurückgegeben. Diese Funktion gibt immer falsch auf iOS zurück Auf Android können Sie eine bestimmte App über AddTarget weitergeben. Für iOS können Sie diesen Beitrag überprüfen und sehen, ob er für Sie funktioniert: https://forum.unity.com/threads/native-share-for-android-ios-open-source.519865/page-4#post -4011874
Es ist einfach nicht möglich, ein Bild/eine Datei mit Text/Betreff in einigen Apps (z. B. Facebook) zu teilen. Sie lassen absichtlich entweder das Bild oder den Text aus dem gemeinsam genutzten Inhalt aus. In diesen Apps müssen Sie ihre eigenen SDKs für komplexe Aktionen verwenden. Für die beste Kompatibilität würde ich Ihnen empfehlen, entweder nur Bild oder nur Text zu teilen.
NativeShare fügt aufgrund der Änderung der neuen Paket -Sichtbarkeitselemente <queries>
Element zu AndroidManifest.xml hinzu. Der Build-Fehler kann durch Befolgen der folgenden Schritte fixiert werden: Android 11, Android 12. Im schlimmsten Fall können Sie Nativeshare mit Winrar oder 7-Zip öffnen, wenn Sie mit Nativeshare in Ordnung sind, nicht an einigen der betroffenen Geräte. und entfernen Sie dann das Element <queries>...</queries>
von AndroidManifest.xml .
Wenn Sie die Unity -Aktivität in einem separaten Prozess ausführen, ändern Sie AndroidManifest.xml innerhalb von Nativeshare.AAR, so dass sowohl NativeShareCustomShareDialogActivity
als auch NativeShareBroadcastListener
auch im selben Prozess ausgeführt werden, z. B.:
< activity android : name = " .NativeShareCustomShareDialogActivity " ... android : process = " :YourProcess " />
< receiver android : name = " .NativeShareBroadcastListener " ... android : process = " :YourProcess " />
Wenn Sie sicher sind, dass Ihr Plugin auf dem neuesten Stand ist, aktivieren Sie die Option für die benutzerdefinierte Proguard-Datei aus den Player-Einstellungen und fügen Sie dieser Datei die folgende Zeile hinzu: -keep class com.yasirkula.unity.* { *; }
Fügen Sie NativeShareNamespace.NSShareResultCallbackAndroid
zum Abschnitt Skip Classes
Ihres Vermögenswerts Ihres Obfuscator -Einstellungen hinzu.
Der folgende Code erfasst den Screenshot des Spiels, wenn Sie auf den Bildschirm tippen, es in einem temporären Pfad speichern und dann:
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();
}