Disponible en la tienda de activos: https://assetstore.unity.com/packages/tools/integration/native-share-for-doid-ios-112731
Hilo del foro: https://forum.unity.com/threads/native-share-for-doid-ios-open-source.519865/
Discord: https://discord.gg/ujjt549aav
Apoyar al desarrollador ☕
Este complemento le ayuda a compartir archivos de forma nativa (imágenes, videos, documentos, etc.) y/o texto sin formato en Android e iOS. Un ContentProvider se utiliza para compartir los medios en Android.
Hay 5 formas de instalar este complemento:
"com.yasirkula.nativeshare": "https://github.com/yasirkula/UnityNativeShare.git",
openupm add com.yasirkula.nativeshare
NativesHare ya no requiere ninguna configuración manual en Android. Si estaba utilizando una versión anterior del complemento, debe eliminar <provider ... />
de NativeHare de su AndroidManifest.xml .
Como referencia, la documentación heredada está disponible en: https://github.com/yasirkula/unitynateshare/wiki/manual-setup-for-android
Hay dos formas de configurar el complemento en iOS:
Simplemente cree un nuevo objeto NativeShare y lo personalice encadenando las siguientes funciones como desee (ver código de ejemplo):
Clear()
: borra el contenido compartido de compartir previamente (si corresponde). Solo útil si la misma instancia de NativesHare se reutilizará para la eficiencia de la memoriaSetSubject( string subject )
: establece el sujeto (utilizado principalmente en aplicaciones de correo electrónico)SetText( string text )
: establece el texto compartido. Tenga en cuenta que la aplicación de Facebook omitirá el texto, si existe (ver este tema)SetUrl( string url )
: establece la URL compartida. En las aplicaciones iOS compatibles, esta URL se utiliza para generar una vista previa de la página web de destino. Otras aplicaciones de iOS pueden agregar la URL al texto u omitirla. Al compartir un archivo en iOS o mientras comparte algo en Android, la URL se adjunta al texto (a menos que el texto ya contenga la URL)AddFile( string filePath, string mime = null )
: agrega el archivo en ruta a la acción compartir. Puede agregar varios archivos de diferentes tipos. El MIME del archivo se determina automáticamente si se deja nulo; Sin embargo, si el archivo no tiene una extensión y/o ya conoce el mime del archivo, puede ingresar el MIME manualmente. Mime no tiene ningún efecto en iOSAddFile( Texture2D texture, string createdFileName = "Image.png" )
: guarda la textura a Application.TemporaryCachepath con el nombre de archivo especificado y agrega el archivo de imagen a la acción compartidaAddEmailRecipient( string emailAddress )
: Auto-popula el campo de destinatarios de aplicaciones de correo electrónico en la plataforma Android. No tiene ningún efecto en iOSSetTitle( string title )
: establece el título del cuadro de diálogo Compartir en la plataforma Android. No tiene ningún efecto en iOSAddTarget( string androidPackageName, string androidClassName = null )
: comparte contenido en una aplicación específica en la plataforma Android. Si AndroidClassName se deja nula, la lista de actividades en el cuadro de diálogo Compartir se reducirá a las actividades en AndroidPackageName especificados que pueden manejar esta acción de compartir. Tenga en cuenta que AndroidClassName, si se proporciona, debe ser el nombre completo de la actividad (con su paquete). Puede llamar a esta función varias veces. Esta función no tiene ningún efecto en iOSSetCallback( ShareResultCallback callback )
: invoca la función de devolución de llamada después de que se completa la acción de acciones. ShareResultCallback tiene la siguiente firma: void ShareResultCallback( ShareResult result, string shareTarget )
ShareResult result
puede tomar 3 valores:string shareTarget
almacena información sobre la aplicación que el usuario ha seleccionado de la hoja de acciones. Puede ser nulo o vacío, si no se proporciona esta información. Por lo general, este es el nombre del paquete/nombre de clase de la aplicación seleccionada. Puede usar este valor para determinar si el usuario ha elegido Twitter de la hoja de acciones: shareTarget != null && shareTarget.ToLowerInvariant().Contains( "twitter" )
Finalmente, llamar a la función compartir () del objeto NativeShare presentará la hoja de acciones.
bool NativeShare.TargetExists( string androidPackageName, string androidClassName = null )
: Devuelve si la aplicación con el nombre de paquete/clase especificado existe en el dispositivo Android. Si AndroidClassName se deja nulo, solo se consulta el nombre del paquete. Esta función siempre devuelve verdadero en iOSbool FindTarget( out string androidPackageName, out string androidClassName, string packageNameRegex, string classNameRegex = null )
: encuentra el nombre del paquete/clase de una aplicación instalada en el dispositivo Android usando expresiones regulares. Devuelve verdadero si se encuentra un nombre de paquete/clase coincidente con éxito. Puede ser útil cuando desea usar la función AddTarget , pero no conozca el nombre exacto de paquete/clase de la actividad de destino. Si ClassNameGex se deja nula, se devuelve la primera actividad en el paquete coincidente. Esta función siempre devuelve falso en iOS En Android, puede compartir en una aplicación específica a través de AddTarget . Para iOS, puede consultar esta publicación y ver si funciona para usted: https://forum.unity.com/threads/native-s-hare-for-doid-ios-open-source.519865/page-4#post -4011874
Simplemente no es posible compartir una imagen/archivo con texto/sujeto en algunas aplicaciones (por ejemplo, Facebook), omiten intencionalmente la imagen o el texto del contenido compartido. Estas aplicaciones requieren que use sus propios SDK para acciones de compartir complejas. Para la mejor compatibilidad, le recomendaría que comparta solo imagen o solo texto.
NativesHare agrega el elemento <queries>
a AndroidManifest.xml debido al nuevo cambio de visibilidad del paquete. El error de compilación se puede solucionar siguiendo estos pasos: Android 11, Android 12. En el peor de los casos, si está de acuerdo con que los nativos no funcionen en algunos de los dispositivos afectados, puede abrir nativoshare.aar con Winrar o 7-zip y luego elimine el elemento <queries>...</queries>
de AndroidManifest.xml .
Si está ejecutando la actividad de la unidad en un proceso separado, modifique androidManifest.xml dentro de los nativoshare.aar para que tanto NativeShareCustomShareDialogActivity
y NativeShareBroadcastListener
también se ejecuten en el mismo proceso, por ejemplo:
< activity android : name = " .NativeShareCustomShareDialogActivity " ... android : process = " :YourProcess " />
< receiver android : name = " .NativeShareBroadcastListener " ... android : process = " :YourProcess " />
Si está seguro de que su complemento está actualizado, habilite la opción de archivo de proaguard personalizado desde la configuración del reproductor y agregue la siguiente línea a ese archivo: -keep class com.yasirkula.unity.* { *; }
Agregue NativeShareNamespace.NSShareResultCallbackAndroid
a la sección Skip Classes
del activo de configuración de su obfuscador.
El siguiente código captura la captura de pantalla del juego cada vez que tocas la pantalla, la guarda en una ruta temporal y luego la comparte:
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();
}