using System; using UnityEngine; #if !UNITY_EDITOR #if UNITY_IOS using System.Runtime.InteropServices; #else using System.IO; #endif #endif // 使用方法 // ShareManagerという名前のオブジェクトに下記コンポーネントをアタッチしてShare~~を呼び出す public class ShareManager : SingletonMonoBehaviour { #if !UNITY_EDITOR private Action callback; #if UNITY_IOS #else private string TexturePath = ""; private AndroidJavaObject worker = null; #endif #endif void Awake(){ if(CheckInstance()) return ; #if !UNITY_EDITOR #if UNITY_IOS #else TexturePath = Application.persistentDataPath + "/SNSTexture.png"; worker = new AndroidJavaObject("jp.usaya.lib.UsayaUnityPlayerActivity"); #endif #endif } public void ShareTwitter(string message, Texture2D texture, Action callback){ #if !UNITY_EDITOR this.callback = callback; #if UNITY_IOS if(NativeUtils.GetiOSMajorVersion() >= 11){ if(NativeUtils.canOpenTwitter()){ callback(true); PostTwitter(message, texture); }else{ callback(false); } this.callback = ActionExtensions.EmptyActionBool; }else{ PostTwitter(message, texture); } #else SaveTexture(texture, TexturePath); PostTwitter(message, TexturePath); #endif #else callback(true); #endif } #if UNITY_ANDROID public void ShareTwitter(string message, string path, Action callback){ #if !UNITY_EDITOR this.callback = callback; PostTwitter(message, path); #else callback(true); #endif } #endif public void ShareFacebook(string message, Texture2D texture, Action callback){ #if !UNITY_EDITOR this.callback = callback; #if UNITY_IOS if(NativeUtils.GetiOSMajorVersion() >= 11){ if(NativeUtils.canOpenFacebook()){ callback(true); PostFacebook(message, texture); }else{ callback(false); } this.callback = ActionExtensions.EmptyActionBool; }else{ PostFacebook(message, texture); } #else SaveTexture(texture, TexturePath); PostFacebook(TexturePath); #endif #else callback(true); #endif } #if UNITY_ANDROID public void ShareFacebook(string message, string path, Action callback){ #if !UNITY_EDITOR this.callback = callback; PostFacebook(path); #else callback(true); #endif } #endif #region iOS #if (UNITY_IOS && !UNITY_EDITOR) /* public static void WhatsappShare(string message, Texture2D texture){ if(texture == null){ Instance.WhatsAppShareText(message); }else{ Instance.WhatsAppShareImage(texture); } } */ [DllImport("__Internal")] private static extern void _MSP_TwPost(string text, string url, string encodedMedia); [DllImport("__Internal")] private static extern void _MSP_FbPost(string text, string url, string encodedMedia); /* [DllImport("__Internal")] private static extern void _MSP_MediaShare(string text, string encodedMedia); [DllImport("__Internal")] private static extern void _ISN_WP_ShareText(string message); [DllImport("__Internal")] private static extern void _ISN_WP_ShareMedia(string encodedMedia); public void ShareMedia(string text, Texture2D texture){ if(texture != null){ byte[] val = texture.EncodeToPNG(); string bytesString = System.Convert.ToBase64String(val); _MSP_MediaShare(text, bytesString); }else{ _MSP_MediaShare(text, ""); } } */ private void PostTwitter(string text, Texture2D texture){ if(text == null) text = ""; if(texture != null){ byte[] val = texture.EncodeToPNG(); string encodedMedia = System.Convert.ToBase64String(val); _MSP_TwPost(text, "", encodedMedia); }else{ _MSP_TwPost(text, "", ""); } } private void PostFacebook(string text, Texture2D texture){ if(text == null) text = ""; if(texture != null){ byte[] val = texture.EncodeToPNG(); string encodedMedia = System.Convert.ToBase64String(val); _MSP_FbPost(text, "", encodedMedia); }else{ _MSP_FbPost(text, "", ""); } } /* private void WhatsAppShareText(string message){ _ISN_WP_ShareText(message); } private void WhatsAppShareImage(Texture2D texture){ byte[] val = texture.EncodeToPNG(); string bytesString = System.Convert.ToBase64String(val); _ISN_WP_ShareMedia(bytesString); } */ // callbacks private void OnTwitterPostFailed(){ callback(false); } private void OnTwitterPostSuccess(){ callback(true); } private void OnFacebookPostFailed(){ callback(false); } private void OnFacebookPostSuccess(){ callback(true); } #endif #endregion #region Android #if (UNITY_ANDROID && !UNITY_EDITOR) private void SaveTexture(Texture2D texture, string path){ using(FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write)){ using(BinaryWriter writer = new BinaryWriter(fileStream)){ writer.Write(texture.EncodeToPNG()); } } } private void PostTwitter(string message, string imagePath){ if(message == null)message = ""; if(imagePath == null)imagePath = ""; worker.Call("postTwitterOrFacebook", true, message, "", imagePath); } private void PostFacebook(string imagePath){ if(imagePath == null)imagePath = ""; worker.Call("postTwitterOrFacebook", false, "", "", imagePath); } private void CreateChooser(string message, string imagePath){ if(message == null)message = ""; if(imagePath == null)imagePath = ""; worker.Call("createChooser", message, imagePath); } private void OnShareManagerResult(string result){ switch(result){ case "0": callback(true); break; default: callback(false); break; } } #endif #endregion }