234 lines
6.2 KiB
C#
234 lines
6.2 KiB
C#
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<ShareManager> {
|
|
|
|
#if !UNITY_EDITOR
|
|
private Action<bool> 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<bool> 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<bool> callback){
|
|
#if !UNITY_EDITOR
|
|
this.callback = callback;
|
|
PostTwitter(message, path);
|
|
#else
|
|
callback(true);
|
|
#endif
|
|
}
|
|
#endif
|
|
|
|
public void ShareFacebook(string message, Texture2D texture, Action<bool> 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<bool> 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
|
|
}
|