자산 스토어에서 구할 수 있습니다 : https://assetstore.unity.com/packages/tools/integration/native-share-for-droid-ios-112731
포럼 스레드 : https://forum.unity.com/threads/native-share-for-droid-ios-open-source.519865/
불화 : 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에서 수동 설정이 필요하지 않습니다. 이전 버전의 플러그인을 사용하는 경우 AndroidManifest.xml 에서 Nativeshare의 <provider ... />
제거해야합니다.
참고로, 레거시 문서는 https://github.com/yasirkula/unitynativeshare/wiki/manual-setup-droid에서 제공됩니다
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에서 파일을 공유 동작에 추가합니다. 다른 유형의 여러 파일을 추가 할 수 있습니다. 파일의 마임은 왼쪽 null이 자동으로 결정됩니다. 그러나 파일에 확장자가 없거나 파일의 마임이 이미 알고 있으면 수동으로 마임을 입력 할 수 있습니다. Mime은 iOS에 영향을 미치지 않습니다AddFile( Texture2D texture, string createdFileName = "Image.png" )
: 텍스처를 Application 에 저장합니다.AddEmailRecipient( string emailAddress )
: Android 플랫폼에서 수신자 전자 메일 애플리케이션의 수신자 필드를 자동 인구 집중화합니다. iOS에는 영향을 미치지 않습니다SetTitle( string title )
: Android 플랫폼에서 공유 대화 상자의 제목을 설정합니다. iOS에는 영향을 미치지 않습니다AddTarget( string androidPackageName, string androidClassName = null )
: Android 플랫폼의 특정 응용 프로그램에서 컨텐츠를 공유합니다. AndroidClassName 이 남은 경우, 공유 대화 상자의 활동 목록은이 공유 동작을 처리 할 수있는 지정된 Androidpackagename 의 활동으로 좁혀집니다. 제공된 경우 AndroidClassName은 활동의 전체 이름 (패키지 포함)이어야합니다. 이 기능을 여러 번 호출 할 수 있습니다. 이 기능은 iOS에 영향을 미치지 않습니다SetCallback( ShareResultCallback callback )
: 공유 조치가 완료된 후 콜백 함수를 호출합니다. ShareresultCallback은 다음과 같은 시그니처를 가지고 있습니다 : void ShareResultCallback( ShareResult result, string shareTarget )
ShareResult result
3 가지 값을 얻을 수 있습니다.string shareTarget
사용자가 공유 시트에서 선택한 앱에 대한 정보를 저장합니다. 이 정보가 제공되지 않으면 무효 또는 비어있을 수 있습니다. 일반적으로 이것은 선택한 응용 프로그램의 패키지 이름/클래스 이름입니다. 이 값을 사용하여 공유 시트에서 사용자가 트위터를 선택했는지 확인할 수 있습니다. shareTarget != null && shareTarget.ToLowerInvariant().Contains( "twitter" )
마지막으로, Nativeshare 객체의 share () 함수를 호출하면 Share Share가 표시됩니다.
bool NativeShare.TargetExists( string androidPackageName, string androidClassName = null )
: 지정된 패키지/클래스 이름이있는 응용 프로그램이 Android 장치에 존재하는지 여부를 반환합니다. AndroidClassName 이 NULL이 남은 경우 패키지 이름 만 쿼리됩니다. 이 기능은 항상 iOS에서 true를 반환합니다bool FindTarget( out string androidPackageName, out string androidClassName, string packageNameRegex, string classNameRegex = null )
: 정기적 인 표현식을 사용하여 Android 장치에서 설치된 응용 프로그램의 패키지/클래스 이름을 찾습니다. 일치하는 패키지/클래스 이름이 성공적으로 발견되면 true를 반환합니다. AddTarget 기능을 사용하려는 경우 유용 할 수 있지만 대상 활동의 정확한 패키지/클래스 이름을 모릅니다. ClassnameGregex 가 NULL이 남아 있으면 일치하는 패키지의 첫 번째 활동이 반환됩니다. 이 기능은 항상 iOS에서 False를 반환합니다 Android에서는 AddTarget을 통해 특정 앱에서 공유 할 수 있습니다. iOS의 경우이 게시물을 확인하여 https://forum.unity.com/threads/native-share-for-odroid-open-source.519865/page-4#post -4011874
일부 앱 (예 : Facebook)에서 텍스트/주제와 이미지/파일을 공유 할 수는 없으며 공유 콘텐츠의 이미지 나 텍스트를 의도적으로 생략합니다. 이 앱은 복잡한 공유 작업을 위해 자체 SDK를 사용해야합니다. 최상의 호환성을 위해 이미지 또는 텍스트 만 공유하는 것이 좋습니다.
Nativeshare는 새로운 패키지 가시성 변경으로 인해 AndroidManifest.xml에 <queries>
요소를 추가합니다. Build 오류는 다음 단계를 수행하여 수정 될 수 있습니다. Android 11, Android 12. 최악의 경우, Nativeshare가 영향을받는 장치 중 일부에서 작동하지 않으면 NativeShare.aar를 Winrar 또는 7-ZIP로 열 수 있습니다. 그런 다음 AndroidManifest.xml 에서 <queries>...</queries>
요소를 제거하십시오.
별도의 프로세스에서 Unity 활동을 실행하는 경우 NativeShareCustomShareDialogActivity
와 NativeShareBroadcastListener
모두 동일한 프로세스에서 실행되도록 NativeShare.aar 내에서 AndroidManifest.xml을 수정하십시오.
< activity android : name = " .NativeShareCustomShareDialogActivity " ... android : process = " :YourProcess " />
< receiver android : name = " .NativeShareBroadcastListener " ... android : process = " :YourProcess " />
플러그인이 최신 상태인지 확인하는 경우 플레이어 설정 에서 사용자 정의 Proguard 파일 옵션을 활성화하고 해당 파일에 다음 줄을 추가하십시오. -keep class com.yasirkula.unity.* { *; }
Obfuscator 설정 자산의 Skip Classes
섹션에 NativeShareNamespace.NSShareResultCallbackAndroid
추가하십시오.
다음 코드는 화면을 탭할 때마다 게임의 스크린 샷을 캡처하고 임시 경로로 저장 한 다음 공유합니다.
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();
}