Unity Android - 图像分享到Facebook失败

时间:2015-08-25 11:41:30

标签: android facebook unity3d share

我最近在Play商店发布了一款游戏。在游戏中,有一个共享按钮,它使用来自资产的促销图像,使用Android本机共享实用程序添加一些文本和共享。我知道FB不允许为用户输入文本,但图像总是无法添加到帖子中。

我已经在这个问题上打了很多天了。我安装了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);
    }

任何提示或建议都会非常感激。 谢谢你的阅读!

1 个答案:

答案 0 :(得分:0)

试试这个:

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);