Disponible sur Asset Store: https://assetstore.unity.com/packages/tools/intégration/native-share-for-android-ios-112731
Thread de forum: https://forum.unity.com/threads/native-share-for-android-ios-open-source.519865/
Discord: https://discord.gg/ujjt549aav
Soutenir le développeur ☕
Ce plugin vous aide à partager nativement les fichiers (images, vidéos, documents, etc.) et / ou un texte brut sur Android et iOS. Un contenuProvider est utilisé pour partager les médias sur Android.
Il existe 5 façons d'installer ce plugin:
"com.yasirkula.nativeshare": "https://github.com/yasirkula/UnityNativeShare.git",
openupm add com.yasirkula.nativeshare
Nativeshare ne nécessite plus aucune configuration manuelle sur Android. Si vous utilisiez une ancienne version du plugin, vous devez supprimer <provider ... />
de votre AndroidManifest.xml .
Pour référence, la documentation héritée est disponible sur: https://github.com/yasirkula/UnityNativeshare/wiki/manual-setup-for-android
Il existe deux façons de configurer le plugin sur iOS:
Créez simplement un nouvel objet Nativeshare et personnalisez-le en enchaînant les fonctions suivantes comme vous le souhaitez (voir Exemple de code):
Clear()
: efface le contenu de partage précédemment défini (le cas échéant). Uniquement utile si la même instance nativeshare sera réutilisée pour l'efficacité de la mémoireSetSubject( string subject )
: Définit le sujet (principalement utilisé dans les applications e-mail)SetText( string text )
: définit le texte partagé. Notez que l'application Facebook omettra le texte, s'il existe (voir ce sujet)SetUrl( string url )
: définit l'URL partagée. Sur les applications iOS prises en charge, cette URL est utilisée pour générer un aperçu de la page Web cible. D'autres applications iOS peuvent ajouter l'URL au texte ou l'omettre. Tout en partageant un fichier sur iOS ou en partageant quoi que ce soit sur Android, l'URL est annexée au texte (sauf si le texte contient déjà l'URL)AddFile( string filePath, string mime = null )
: Ajoute le fichier au chemin de l'action de partage. Vous pouvez ajouter plusieurs fichiers de différents types. Le mime du fichier est automatiquement déterminé s'il est laissé nul; Cependant, si le fichier n'a pas d'extension et / ou que vous connaissez déjà le mime du fichier, vous pouvez saisir le mime manuellement. Mime n'a aucun effet sur iOSAddFile( Texture2D texture, string createdFileName = "Image.png" )
: enregistre la texture à Application.TemporaryCachepath avec le nom de fichier spécifié et ajoute le fichier image à l'action de partageAddEmailRecipient( string emailAddress )
: Auto-popate le champ des destinataires des applications de messagerie sur la plate-forme Android. N'a aucun effet sur iOSSetTitle( string title )
: Définit le titre de la boîte de dialogue Share sur la plate-forme Android. N'a aucun effet sur iOSAddTarget( string androidPackageName, string androidClassName = null )
: partage le contenu sur une application spécifique sur la plate-forme Android. Si AndroidClassName est laissé nul, la liste des activités dans la boîte de dialogue Partager sera réduite aux activités de l' AndroidPackageName spécifié qui peut gérer cette action de partage. Notez que AndroidClassName, s'il est fourni, doit être le nom complet de l'activité (avec son package). Vous pouvez appeler cette fonction plusieurs fois. Cette fonction n'a aucun effet sur iOSSetCallback( ShareResultCallback callback )
: invoque la fonction de rappel une fois l'action de partage terminée. ShareResultCallback a la signature suivante: void ShareResultCallback( ShareResult result, string shareTarget )
ShareResult result
peut prendre 3 valeurs:string shareTarget
stocke des informations sur l'application que l'utilisateur a sélectionné parmi la feuille d'actions. Il peut être nul ou vide, si ces informations ne sont pas fournies. Habituellement, il s'agit du nom / nom de classe du package de l'application sélectionnée. Vous pouvez utiliser cette valeur pour déterminer si l'utilisateur a choisi Twitter sur la feuille d'actions: shareTarget != null && shareTarget.ToLowerInvariant().Contains( "twitter" )
Enfin, l'appel de la fonction Share () de l'objet Nativeshare présentera la feuille de partage.
bool NativeShare.TargetExists( string androidPackageName, string androidClassName = null )
: Renvoie si l'application avec le package / nom de classe spécifié existe sur le périphérique Android. Si AndroidClassName est laissé nul, seul le nom du package est interrogé. Cette fonction renvoie toujours vrai sur iOSbool FindTarget( out string androidPackageName, out string androidClassName, string packageNameRegex, string classNameRegex = null )
: trouve le package / nom de classe d'une application installée sur le périphérique Android à l'aide d'expressions régulières. Renvoie True si un package / nom de classe correspondant est trouvé avec succès. Peut être utile lorsque vous souhaitez utiliser la fonction AddTarget mais ne connaissez pas le package / nom de classe exact de l'activité cible. Si ClassNameRegex est laissé nul, la première activité du package de correspondance est renvoyée. Cette fonction renvoie toujours faux sur iOS Sur Android, vous pouvez partager sur une application spécifique via AddTarget . Pour iOS, vous pouvez consulter cet article et voir si cela fonctionne pour vous: https://forum.unity.com/threads/native-share-for-android-ios-open-source.519865/page-4#post -4011874
Il n'est tout simplement pas possible de partager une image / fichier avec du texte / sujet sur certaines applications (par exemple Facebook), ils omettent intentionnellement l'image ou le texte du contenu partagé. Ces applications vous obligent à utiliser leurs propres SDK pour des actions de partage complexes. Pour une meilleure compatibilité, je vous recommande de partager uniquement l'image ou le texte uniquement.
Nativeshare ajoute un élément <queries>
à AndroidManifest.xml en raison du changement de visibilité du nouveau package. L'erreur de construction peut être corrigée en suivant ces étapes: Android 11, Android 12. Dans le pire des cas, si vous êtes d'accord avec Nativeshare ne fonctionne pas sur certains des appareils affectés, vous pouvez ouvrir Nativeshare.Aar avec Winrar ou 7-Zip puis supprimez l'élément <queries>...</queries>
d' AndroidManifest.xml .
Si vous exécutez l'activité Unity dans un processus distinct, modifiez AndroidManIfest.xml dans nativeshare.aar de sorte que NativeShareCustomShareDialogActivity
et NativeShareBroadcastListener
s'exécutent également sur le même processus, par exemple:
< activity android : name = " .NativeShareCustomShareDialogActivity " ... android : process = " :YourProcess " />
< receiver android : name = " .NativeShareBroadcastListener " ... android : process = " :YourProcess " />
Si vous êtes sûr que votre plugin est à jour, activez l'option de fichier Proguard personnalisé à partir des paramètres du lecteur et ajoutez la ligne suivante à ce fichier: -keep class com.yasirkula.unity.* { *; }
Ajoutez NativeShareNamespace.NSShareResultCallbackAndroid
dans la section Skip Classes
de votre actif paramètres Obfuscator.
Le code suivant capture la capture d'écran du jeu chaque fois que vous appuyez sur l'écran, l'enregistre dans un chemin temporaire, puis le partage:
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();
}