Unity Android - 图片分享到 Facebook 失败
Unity Android - Image share to facebook fails
我最近在 Play 商店发布了一款游戏。在游戏中有一个分享按钮,它使用资产中的宣传图片,添加一些文本并使用 Android 本机分享实用程序进行分享。我知道 FB 不允许为用户输入文本,但图像总是无法添加到 post.
我已经为这个问题绞尽脑汁好几天了。我安装了 Facebook sdk,它本身并没有解决问题,但我不确定如何继续希望按钮允许用户在共享时选择要使用的服务,而不是仅仅使用 facebook sdk 共享.
这是我使用的代码:
yield return new WaitForEndOfFrame();
if (!Application.isEditor)
{
string fromPath = "jar:file://" + Application.dataPath + "!/assets/";
string toPath = Application.persistentDataPath + "/";
string[] filesNamesToCopy = new string[] { "a.txt", "b.txt" };
foreach (string fileName in filesNamesToCopy)
{
Debug.Log("copying from " + fromPath + fileName + " to " + toPath);
WWW www1 = new WWW(fromPath + fileName);
yield return www1;
Debug.Log("yield done");
File.WriteAllBytes(toPath + fileName, www1.bytes);
Debug.Log("file copy done");
}
// code to open the image and share it
AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");
AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");
intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));
AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse", "jar:file://" + Application.dataPath + "!/assets/" + "Promo.jpg");
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject);
intentObject.Call<AndroidJavaObject>("setType", "text/plain");
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), "I scored " + score + " in Space Drill, try to beat me! #spacedrill https://play.google.com/store/apps/details?id=com.AbsinthePie.space_drill");
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_SUBJECT"), "SUBJECT");
intentObject.Call<AndroidJavaObject>("setType", "image/jpeg");
AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");
currentActivity.Call("startActivity", intentObject);
}
任何提示或建议将不胜感激。
感谢阅读!
试试这个:
Texture2D tex=new Texture2D(width,height,TextureFormat.RGB24,false);
tex.ReadPixels(new Rect(startX,startY,width,height),0,0);
tex.Apply();
byte[] dataToSave = tex.EncodeToPNG();
grab = false;
string destination = Path.Combine(Application.persistentDataPath,System.DateTime.Now.ToString("yyyy-MM-dd-HHmmss") + ".png");
File.WriteAllBytes(destination, dataToSave);
AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");
AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");
intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));
AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse","file://" + destination);
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject);
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), message);
intentObject.Call<AndroidJavaObject>("setType", "image/jpeg");
AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");
// option one WITHOUT chooser:
currentActivity.Call("startActivity", intentObject);
我最近在 Play 商店发布了一款游戏。在游戏中有一个分享按钮,它使用资产中的宣传图片,添加一些文本并使用 Android 本机分享实用程序进行分享。我知道 FB 不允许为用户输入文本,但图像总是无法添加到 post.
我已经为这个问题绞尽脑汁好几天了。我安装了 Facebook sdk,它本身并没有解决问题,但我不确定如何继续希望按钮允许用户在共享时选择要使用的服务,而不是仅仅使用 facebook sdk 共享.
这是我使用的代码:
yield return new WaitForEndOfFrame();
if (!Application.isEditor)
{
string fromPath = "jar:file://" + Application.dataPath + "!/assets/";
string toPath = Application.persistentDataPath + "/";
string[] filesNamesToCopy = new string[] { "a.txt", "b.txt" };
foreach (string fileName in filesNamesToCopy)
{
Debug.Log("copying from " + fromPath + fileName + " to " + toPath);
WWW www1 = new WWW(fromPath + fileName);
yield return www1;
Debug.Log("yield done");
File.WriteAllBytes(toPath + fileName, www1.bytes);
Debug.Log("file copy done");
}
// code to open the image and share it
AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");
AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");
intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));
AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse", "jar:file://" + Application.dataPath + "!/assets/" + "Promo.jpg");
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject);
intentObject.Call<AndroidJavaObject>("setType", "text/plain");
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), "I scored " + score + " in Space Drill, try to beat me! #spacedrill https://play.google.com/store/apps/details?id=com.AbsinthePie.space_drill");
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_SUBJECT"), "SUBJECT");
intentObject.Call<AndroidJavaObject>("setType", "image/jpeg");
AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");
currentActivity.Call("startActivity", intentObject);
}
任何提示或建议将不胜感激。 感谢阅读!
试试这个:
Texture2D tex=new Texture2D(width,height,TextureFormat.RGB24,false);
tex.ReadPixels(new Rect(startX,startY,width,height),0,0);
tex.Apply();
byte[] dataToSave = tex.EncodeToPNG();
grab = false;
string destination = Path.Combine(Application.persistentDataPath,System.DateTime.Now.ToString("yyyy-MM-dd-HHmmss") + ".png");
File.WriteAllBytes(destination, dataToSave);
AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");
AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");
intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));
AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse","file://" + destination);
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject);
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), message);
intentObject.Call<AndroidJavaObject>("setType", "image/jpeg");
AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");
// option one WITHOUT chooser:
currentActivity.Call("startActivity", intentObject);