มีจำหน่ายในร้านค้าสินทรัพย์: https://assetstore.unity.com/packages/tools/integration/native-share-for-android-ios-os
เธรดฟอรัม: https://forum.unity.com/threads/native-share-for-android-ios-open-source.519865/
Discord: https://discord.gg/ujjt549aav
สนับสนุนนักพัฒนา☕
ปลั๊กอินนี้ช่วยให้คุณแบ่งปันไฟล์ (รูปภาพวิดีโอเอกสาร ฯลฯ ) และ/หรือข้อความธรรมดาบน Android & iOS ContentProvider ใช้เพื่อแบ่งปันสื่อบน Android
มี 5 วิธีในการติดตั้งปลั๊กอินนี้:
"com.yasirkula.nativeshare": "https://github.com/yasirkula/UnityNativeShare.git",
openupm add com.yasirkula.nativeshare
Nativeshare ไม่ต้องการการตั้งค่าด้วยตนเองบน Android อีกต่อไป หากคุณใช้ปลั๊กอินรุ่นเก่าคุณต้องลบ <provider ... />
จาก AndroidManifest.xml ของคุณ
สำหรับการอ้างอิงเอกสารมรดกมีอยู่ที่: https://github.com/yasirkula/unityativeshare/wiki/manual-setup-for-android
มีสองวิธีในการตั้งค่าปลั๊กอินบน iOS:
เพียงสร้างวัตถุ Nativeshare ใหม่และปรับแต่งโดยการผูกมัดฟังก์ชั่นต่อไปนี้ตามที่คุณต้องการ (ดูตัวอย่างโค้ด):
Clear()
: ล้างเนื้อหาที่ตั้งไว้ก่อนหน้านี้ (ถ้ามี) มีประโยชน์เฉพาะในกรณีที่อินสแตนซ์ Nativeshare เดียวกันจะถูกนำกลับมาใช้ใหม่เพื่อประสิทธิภาพของหน่วยความจำ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 )
: เพิ่มไฟล์ที่ PATH ไปยังการดำเนินการแชร์ คุณสามารถเพิ่มไฟล์หลายประเภทที่แตกต่างกัน MIME ของไฟล์จะถูกกำหนดโดยอัตโนมัติหากปล่อยให้เป็นโมฆะ อย่างไรก็ตามหากไฟล์ไม่มีส่วนขยายและ/หรือคุณรู้จัก MIME ของไฟล์อยู่แล้วคุณสามารถป้อน MIME ด้วยตนเองได้ MIME ไม่มีผลต่อ iOSAddFile( Texture2D texture, string createdFileName = "Image.png" )
: บันทึก พื้นผิว ไปยัง application.temporaryCachepath ด้วยชื่อไฟล์ที่ระบุและเพิ่มไฟล์ภาพลงในการดำเนินการแชร์AddEmailRecipient( string emailAddress )
: เติมเต็มอัตโนมัติฟิลด์ ผู้รับ ของแอปพลิเคชันอีเมลบนแพลตฟอร์ม Android ไม่มีผลต่อ iOSSetTitle( string title )
: ตั้งชื่อชื่อของกล่องโต้ตอบแชร์บนแพลตฟอร์ม Android ไม่มีผลต่อ iOSAddTarget( string androidPackageName, string androidClassName = null )
: แชร์เนื้อหาบนแอปพลิเคชันเฉพาะบนแพลตฟอร์ม Android หาก AndroidClassName ถูกทิ้งให้เป็นโมฆะรายการกิจกรรมในกล่องโต้ตอบการแชร์จะถูก จำกัด ให้แคบลงกับกิจกรรมใน AndroidPackagename ที่ระบุซึ่งสามารถจัดการกับการดำเนินการแบ่งปันนี้ได้ โปรดทราบว่าหากมีชื่อ AndroidClassName จะต้องเป็นชื่อเต็มของกิจกรรม (พร้อมแพ็คเกจ) คุณสามารถเรียกใช้ฟังก์ชั่นนี้ได้หลายครั้ง ฟังก์ชั่นนี้ไม่มีผลต่อ iOSSetCallback( ShareResultCallback callback )
: เรียกใช้ฟังก์ชัน การโทรกลับ หลังจากการดำเนินการแชร์เสร็จสมบูรณ์ SharerEsultCallback มีลายเซ็นต่อไปนี้: void ShareResultCallback( ShareResult result, string shareTarget )
ShareResult result
อาจใช้ 3 ค่า:string shareTarget
เก็บข้อมูลเกี่ยวกับแอพที่ผู้ใช้เลือกจากแผ่นแชร์ อาจเป็น โมฆะ หรือว่างเปล่าหากไม่มีข้อมูลนี้ โดยปกตินี่คือชื่อแพ็คเกจ/ชื่อคลาสของแอปพลิเคชันที่เลือก คุณสามารถใช้ค่านี้เพื่อพิจารณาว่าผู้ใช้ได้เลือก Twitter จากแผ่นแชร์: shareTarget != null && shareTarget.ToLowerInvariant().Contains( "twitter" )
ในที่สุดการเรียกฟังก์ชั่น การแบ่งปัน () ของวัตถุ Nativeshare จะนำเสนอแผ่นแบ่งปัน
bool NativeShare.TargetExists( string androidPackageName, string androidClassName = null )
: ส่งคืนแอปพลิเคชันที่มีชื่อแพ็คเกจ/คลาสที่ระบุอยู่บนอุปกรณ์ Android หรือไม่ หาก AndroidClassName เป็น NULL จะมีเพียงชื่อแพ็คเกจเท่านั้นที่จะสอบถาม ฟังก์ชั่นนี้จะส่งคืนจริงบน iOS เสมอbool FindTarget( out string androidPackageName, out string androidClassName, string packageNameRegex, string classNameRegex = null )
: ค้นหาชื่อแพ็คเกจ/คลาสของแอปพลิเคชันที่ติดตั้งบนอุปกรณ์ Android โดยใช้นิพจน์ปกติ ส่งคืนจริงหากพบแพ็คเกจ/คลาสที่ตรงกันได้สำเร็จ จะมีประโยชน์เมื่อคุณต้องการใช้ฟังก์ชั่น AddTarget แต่ไม่ทราบชื่อแพ็คเกจ/คลาสที่แน่นอนของกิจกรรมเป้าหมาย หาก classnameregex เป็นโมฆะกิจกรรมแรกในแพ็คเกจการจับคู่จะถูกส่งคืน ฟังก์ชั่นนี้จะส่งคืน false บน iOS เสมอ บน Android คุณสามารถแชร์ในแอพเฉพาะผ่าน Addtarget สำหรับ iOS คุณสามารถตรวจสอบโพสต์นี้และดูว่าเหมาะกับคุณหรือไม่: https://forum.unity.com/threads/native-share-for-android-ios-open-source.519865/page-4#post -4011874
เป็นไปไม่ได้ที่จะแบ่งปันรูปภาพ/ไฟล์ด้วยข้อความ/หัวเรื่องในแอพบางตัว (เช่น Facebook) พวกเขาตั้งใจละเว้นภาพหรือข้อความจากเนื้อหาที่ใช้ร่วมกันโดยเจตนา แอพเหล่านี้ต้องการให้คุณใช้ SDK ของตัวเองเพื่อการแชร์ที่ซับซ้อน เพื่อความเข้ากันได้ที่ดีที่สุดฉันขอแนะนำให้คุณแบ่งปันภาพหรือข้อความเท่านั้น
Nativeshare เพิ่มองค์ประกอบ <queries>
ให้กับ AndroidManifest.xml เนื่องจากการเปลี่ยนแปลงการมองเห็นแพ็คเกจใหม่ ข้อผิดพลาดในการสร้างสามารถแก้ไขได้โดยทำตามขั้นตอนเหล่านี้: Android 11, Android 12. ในกรณีที่เลวร้ายที่สุดหากคุณตกลงกับ Nativeshare ที่ไม่ได้ทำงานกับอุปกรณ์ที่ได้รับผลกระทบคุณสามารถเปิด Nativeshare.aar ด้วย Winrar หรือ 7-Zip จากนั้นลบองค์ประกอบ <queries>...</queries>
จาก AndroidManifest.xml
หากคุณกำลังดำเนินกิจกรรม Unity ในกระบวนการแยกต่างหากให้แก้ไข AndroidManifest.xml ภายใน Nativeshare.aar เพื่อให้ทั้ง NativeShareCustomShareDialogActivity
และ NativeShareBroadcastListener
ยังทำงานในกระบวนการเดียวกันเช่น:
< activity android : name = " .NativeShareCustomShareDialogActivity " ... android : process = " :YourProcess " />
< receiver android : name = " .NativeShareBroadcastListener " ... android : process = " :YourProcess " />
หากคุณแน่ใจว่าปลั๊กอินของคุณทันสมัยให้เปิดใช้งานตัวเลือก ไฟล์ proguard ที่กำหนดเอง จาก การตั้งค่าผู้เล่น และเพิ่มบรรทัดต่อไปนี้ในไฟล์นั้น: -keep class com.yasirkula.unity.* { *; }
เพิ่ม NativeShareNamespace.NSShareResultCallbackAndroid
ไปยังส่วน Skip Classes
ของสินทรัพย์การตั้งค่า Obfuscator ของคุณ
รหัสต่อไปนี้จะจับภาพหน้าจอของเกมเมื่อใดก็ตามที่คุณแตะหน้าจอบันทึกไว้ในเส้นทางชั่วคราวจากนั้นแชร์:
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();
}