09.04.2023: Bu plugin hem dosya hem metni birlikte paylaşmayı bazı uygulamalarda desteklemediği için (bu ilgili uygulamaların kısıtlaması da olabilir, plugin’in eksikliği de, bilmiyorum) artık plugin’e olan desteğimi sonlandırdım.
Tekrardan merhabalar,
Bu Unity dersinde, Android ve iOS platformlarında nasıl sosyal medyada dosya ve(ya) yazı paylaşabileceğinizi göstereceğim. Bu şekilde, örneğin level bitince, kullanıcı skorunu veya oyundan bir screenshot’ı Facebook, WhatsApp, Twitter vs. sosyal platformlarda paylaşabilir.
Hazırsanız başlayalım…
Kurulum
Öncelikle şu adresteki NativeShare.unitypackage‘ı Assets-Import Package yoluyla projenize import edin: https://github.com/yasirkula/UnityNativeShare/releases
Alternatif olarak, asset’i Asset Store’dan da import edebilirsiniz: https://assetstore.unity.com/packages/tools/integration/native-share-for-android-ios-112731
Eğer iOS’a build alacaksanız, Plugins/NativeShare/Editor/NSPostProcessBuild.cs scriptindeki PHOTO_LIBRARY_USAGE_DESCRIPTION‘ın değerini dilerseniz değiştirin. Buraya girdiğiniz yazı, kullanıcı paylaşılan resmi veya videoyu galeriye kaydetmek isterse, galeriye erişim izni isterken gözükecek. Android’e build alacaksanız özel bir şey yapmanız gerekmiyor.
Kullanım
Öncelikle new NativeShare() şeklinde yeni bir NativeShare objesi oluşturun. Ardından bu objenin aşağıdaki fonksiyonlarından istediklerinizi çağırarak paylaşılan içeriği kişiselleştirebilirsiniz:
SetSubject( string subject ): Paylaşılan içeriğin konusunu belirler. Bu değer daha çok e-posta uygulamalarında kullanılır.
SetText( string text ): Paylaşılan içeriğe yazı ekler. Ancak Facebook gibi bazı uygulamalar hem resim hem de yazı paylaşmaya kalkışırsanız yazıyı yoksayarlar, bu konuda maalesef yapacak bir şey yok.
AddFile( string filePath, string mime = null ): Paylaşılan içeriğe dosya (örneğin resim veya video) eklemeye yarar. Bu fonksiyonu birden çok kez çağırarak birden fazla dosyayı aynı anda paylaşabilirsiniz. filePath‘e değer olarak dosyanın konumunu girin. Eğer dosyanın mime‘ını biliyorsanız mime parametresine değer olarak girebilirsiniz (örneğin PNG resim paylaşıyorsanız image/png girebilirsiniz). Bilmiyorsanız veya uğraşmak istemiyorsanız bu değeri null olarak bırakabilirsiniz. Bu durumda dosyanın mime’ı, dosya uzantısından otomatik olarak belirlenmeye çalışılacaktır. mime parametresinin iOS’ta bir etkisi yoktur.
AddFile( Texture2D texture, string createdFileName = “Image.png” ): Texture2D objesini bir resim dosyasına çevirip paylaşılan içeriğe eklemeye yarar. Oluşturulan resim dosyasının ismi, createdFileName parametresi tarafından belirlenir.
SetTitle( string title ): İçeriğin paylaşılacağı uygulamayı seçmeye yarayan diyaloğun başlığındaki yazıyı belirler. Bu parametrenin iOS’ta bir etkisi yoktur.
SetCallback( ShareResultCallback callback ): Kullanıcı içeriği paylaştıktan sonra, callback fonksiyonunun otomatik olarak çağrılmasını sağlar. Bu fonksiyon 2 parametre alır:
- ShareResult result: Kullanıcı içeriği paylaştıysa Shared, işlemi iptal ettiyse NotShared, bu bilgi edinilemiyorsa Unknown değerini alır. Maalesef ki çoğu uygulama, kullanıcı uygulamayı açtıktan sonra içeriği paylaşmasa bile Shared döndürür; bunun önüne geçmek mümkün değildir
- string shareTarget: Kullanıcı içeriği hangi uygulama ile paylaşmayı seçtiyse, o uygulamanın class ismini döndürür. Bu bilgi edinilemiyorsa null veya boş bir string döndürür
İşiniz bitince NativeShare objesinin Share() fonksiyonunu kullanarak içeriği paylaşabilirsiniz.
Örnek Kod
Aşağıdaki kod, ekrana tıklayınca screenshot alıp bu screenshot’ı bir yazı ve konu eşliğinde paylaşmaya yarar:
void Update()
{
if( Input.GetMouseButtonDown( 0 ) )
StartCoroutine( ScreenshotAlVePaylas() );
}
private IEnumerator ScreenshotAlVePaylas()
{
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();
// Screenshot'ı geçici bir dosyaya yaz
string dosyaKonumu = Path.Combine( Application.temporaryCachePath, "geçici resim.png" );
File.WriteAllBytes( dosyaKonumu, ss.EncodeToPNG() );
// Artık screenshot'a ihtiyacımız kalmadı
Destroy( ss );
// Dosyayı yazı ve konu eşliğinde paylaş
new NativeShare().AddFile( dosyaKonumu )
.SetSubject( "Konu buraya gelecek" ).SetText( "Merhaba Dünya!" )
.SetCallback( ( result, shareTarget ) => Debug.Log( "Paylaşma durumu: " + result + ", seçilen uygulama: " + shareTarget ) )
.Share();
}
İşte bu kadar! İlerleyen derslerde görüşmek üzere…