Tersedia di toko aset: https://assetstore.unity.com/packages/tools/integration/native-hare-for-android-ios-112731
Thread Forum: https://forum.unity.com/threads/native-hare-for-android-ios-open-source.519865/
Perselisihan: https://discord.gg/ujjt549aav
Mendukung pengembang ☕
Plugin ini membantu Anda berbagi file secara asli (gambar, video, dokumen, dll.) Dan/atau teks biasa di Android & iOS. ContentProvider digunakan untuk berbagi media di Android.
Ada 5 cara untuk menginstal plugin ini:
"com.yasirkula.nativeshare": "https://github.com/yasirkula/UnityNativeShare.git",
openupm add com.yasirkula.nativeshare
NativeHare tidak lagi membutuhkan pengaturan manual di Android. Jika Anda menggunakan versi plugin yang lebih lama, Anda perlu menghapus <provider ... />
NativeShare dari androidmanifest.xml Anda.
Untuk referensi, dokumentasi warisan tersedia di: https://github.com/yasirkula/unitynativeshare/wiki/manual-setup-for-android
Ada dua cara untuk mengatur plugin di iOS:
Cukup buat objek NativeShare baru dan sesuaikan dengan merantai fungsi -fungsi berikut sesuai keinginan Anda (lihat kode contoh):
Clear()
: Menghapus Konten Bagikan yang Ditentukan sebelumnya (jika ada). Hanya berguna jika instance NativeShare yang sama akan digunakan kembali untuk efisiensi memoriSetSubject( string subject )
: Mengatur subjek (terutama digunakan dalam aplikasi email)SetText( string text )
: Mengatur teks yang dibagikan. Perhatikan bahwa aplikasi Facebook akan menghilangkan teks, jika ada (lihat topik ini)SetUrl( string url )
: Mengatur URL bersama. Pada aplikasi iOS yang didukung, URL ini digunakan untuk menghasilkan pratinjau halaman web target. Aplikasi iOS lainnya dapat menambahkan URL ke teks atau menghilangkannya. Saat berbagi file di iOS atau saat berbagi apa pun di Android, URL ditambahkan ke teks (kecuali teks sudah berisi URL)AddFile( string filePath, string mime = null )
: Menambahkan file di path ke tindakan berbagi. Anda dapat menambahkan beberapa file dari berbagai jenis. Mime file secara otomatis ditentukan jika dibiarkan nol; Namun, jika file tidak memiliki ekstensi dan/atau Anda sudah tahu mime file, Anda dapat memasukkan pantomim secara manual. Pantomim tidak berpengaruh pada iOSAddFile( Texture2D texture, string createdFileName = "Image.png" )
: Menghemat tekstur ke aplikasi.AddEmailRecipient( string emailAddress )
: Auto-Populates bidang penerima aplikasi email pada platform Android. Tidak berpengaruh pada iOSSetTitle( string title )
: Menetapkan judul dialog Bagikan di Platform Android. Tidak berpengaruh pada iOSAddTarget( string androidPackageName, string androidClassName = null )
: Berbagi konten pada aplikasi spesifik pada platform Android. Jika AndroidClassName dibiarkan nol, daftar kegiatan dalam dialog Share akan dipersempit ke kegiatan di AndroidPackAgename yang ditentukan yang dapat menangani tindakan berbagi ini. Perhatikan bahwa AndroidClassName, jika disediakan, harus menjadi nama lengkap dari aktivitas (dengan paketnya). Anda dapat menyebut fungsi ini beberapa kali. Fungsi ini tidak berpengaruh pada iOSSetCallback( ShareResultCallback callback )
: Mengikuti fungsi callback setelah tindakan berbagi selesai. ShareresultCallback memiliki tanda tangan berikut: void ShareResultCallback( ShareResult result, string shareTarget )
ShareResult result
dapat mengambil 3 nilai:string shareTarget
menyimpan informasi tentang aplikasi yang telah dipilih pengguna dari lembar berbagi. Itu bisa nol atau kosong, jika informasi ini tidak disediakan. Biasanya, ini adalah nama paket/nama kelas dari aplikasi yang dipilih. Anda dapat menggunakan nilai ini untuk misalnya menentukan apakah pengguna telah memilih Twitter dari lembar berbagi: shareTarget != null && shareTarget.ToLowerInvariant().Contains( "twitter" )
Akhirnya, memanggil fungsi Share () dari objek NativeHare akan menyajikan lembar berbagi.
bool NativeShare.TargetExists( string androidPackageName, string androidClassName = null )
: Mengembalikan apakah aplikasi dengan paket/nama kelas yang ditentukan ada di perangkat Android. Jika AndroidClassName dibiarkan nol, hanya nama paket yang ditanya. Fungsi ini selalu mengembalikan true di iOSbool FindTarget( out string androidPackageName, out string androidClassName, string packageNameRegex, string classNameRegex = null )
: Temukan nama paket/kelas dari aplikasi yang diinstal pada perangkat Android menggunakan ekspresi reguler. Mengembalikan true jika nama paket/kelas yang cocok ditemukan dengan sukses. Dapat bermanfaat saat Anda ingin menggunakan fungsi AddTarget tetapi tidak tahu nama paket/kelas yang tepat dari aktivitas target. Jika Classnameregex dibiarkan nol, aktivitas pertama dalam paket pencocokan dikembalikan. Fungsi ini selalu mengembalikan false di iOS Di Android, Anda dapat berbagi pada aplikasi tertentu melalui AddTarget . Untuk iOS, Anda dapat melihat posting ini dan melihat apakah itu berhasil untuk Anda: https://forum.unity.com/threads/native-hare-for-android-ios-open-source.519865/page-4#post -4011874
Tidak mungkin untuk berbagi gambar/file dengan teks/subjek pada beberapa aplikasi (misalnya Facebook), mereka sengaja menghilangkan gambar atau teks dari konten yang dibagikan. Aplikasi ini mengharuskan Anda menggunakan SDK mereka sendiri untuk tindakan berbagi yang kompleks. Untuk kompatibilitas terbaik, saya sarankan Anda untuk berbagi hanya gambar atau hanya teks.
NativeHare menambahkan elemen <queries>
ke androidmanifest.xml karena perubahan visibilitas paket yang baru. Kesalahan build dapat diperbaiki dengan mengikuti langkah-langkah ini: Android 11, Android 12. Dalam kasus terburuk, jika Anda baik-baik saja dengan NativeHare tidak bekerja pada beberapa perangkat yang terkena dampak, maka Anda dapat membuka NativeShare.aar dengan Winrar atau 7-Zip dan kemudian hapus elemen <queries>...</queries>
dari androidmanifest.xml .
Jika Anda menjalankan aktivitas persatuan dalam proses yang terpisah, maka modifikasi androidmanifest.xml di dalam nativeShare.aar sehingga baik NativeShareCustomShareDialogActivity
dan NativeShareBroadcastListener
juga berjalan pada proses yang sama, misalnya:
< activity android : name = " .NativeShareCustomShareDialogActivity " ... android : process = " :YourProcess " />
< receiver android : name = " .NativeShareBroadcastListener " ... android : process = " :YourProcess " />
Jika Anda yakin bahwa plugin Anda terkini, maka aktifkan opsi file proguard khusus dari pengaturan pemain dan tambahkan baris berikut ke file tersebut: -keep class com.yasirkula.unity.* { *; }
Tambahkan NativeShareNamespace.NSShareResultCallbackAndroid
ke bagian Skip Classes
Aset Pengaturan Obfuscator Anda.
Kode berikut menangkap tangkapan layar permainan setiap kali Anda mengetuk layar, menyimpannya di jalur sementara dan kemudian membagikannya:
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();
}