如何使用Unity3D发布到Twitter?它总是抛出一个错误

如何使用Unity3D发布到Twitter?它总是抛出一个错误,twitter,plugins,unity3d,Twitter,Plugins,Unity3d,我已经将G+和Facebook整合到了我的游戏中,但Twitter确实因为无论出于什么原因都很难设置而备受瞩目 首先,Twitter的网站上没有官方插件。他们的系统通过他们的网站进行身份验证,使用代码帮助验证登录和发布的用户。因为在互联网上没有人想做一个关于如何做这样一件事的教程,这实际上是最新的,所以我很困惑 我能找到的最好的东西就是资产商店中的这个插件,它是免费的,名为“让我们在Unity中Tweet” 我看到的每个人都有和我一样的问题,自动地说,哦,是的,这个插件工作,只要改变这个和这个,

我已经将G+和Facebook整合到了我的游戏中,但Twitter确实因为无论出于什么原因都很难设置而备受瞩目

首先,Twitter的网站上没有官方插件。他们的系统通过他们的网站进行身份验证,使用代码帮助验证登录和发布的用户。因为在互联网上没有人想做一个关于如何做这样一件事的教程,这实际上是最新的,所以我很困惑

我能找到的最好的东西就是资产商店中的这个插件,它是免费的,名为“让我们在Unity中Tweet”

我看到的每个人都有和我一样的问题,自动地说,哦,是的,这个插件工作,只要改变这个和这个,它就会工作!我确实改变了这个和那个,错误。我没有改变这个和那个,错误。我甚至阅读了描述,并使用了一些插件粉丝制作的“清理版”。错误

错误:

代码生成错误:

守则:

using Twitter;
using UnityEngine;

public class Demo : MonoBehaviour
{
    // You need to save access token and secret for later use.
    // You can keep using them whenever you need to access the user's Twitter account.
    // They will be always valid until the user revokes the access to your application.
    private const string PLAYER_PREFS_TWITTER_USER_ID = "";

    private const string PLAYER_PREFS_TWITTER_USER_SCREEN_NAME = "TwitterUserScreenName";
    private const string PLAYER_PREFS_TWITTER_USER_TOKEN = "";
    private const string PLAYER_PREFS_TWITTER_USER_TOKEN_SECRET = "";
    public string CONSUMER_KEY;
    public string CONSUMER_SECRET;
    public float PIN_ENTER_HEIGHT;
    public float PIN_ENTER_WIDTH;
    public float PIN_ENTER_X;
    public float PIN_ENTER_Y;
    public float PIN_INPUT_HEIGHT;
    public float PIN_INPUT_WIDTH;
    public float PIN_INPUT_X;
    public float PIN_INPUT_Y;
    public float POST_TWEET_HEIGHT;
    public float POST_TWEET_WIDTH;
    public float POST_TWEET_X;
    public float POST_TWEET_Y;
    public float TWEET_INPUT_HEIGHT;
    public float TWEET_INPUT_WIDTH;
    public float TWEET_INPUT_X;
    public float TWEET_INPUT_Y;
    public float USER_LOG_IN_HEIGHT;
    public float USER_LOG_IN_WIDTH;
    public float USER_LOG_IN_X;
    public float USER_LOG_IN_Y;

    private AccessTokenResponse m_AccessTokenResponse;

    private string m_PIN = "Please enter your PIN here.";
    private RequestTokenResponse m_RequestTokenResponse;
    private string m_Tweet = "Please enter your tweet here.";

    // Use this for initialization
    private void Start()
    {
        LoadTwitterUserInfo();

    }

    // Update is called once per frame
    private void Update()
    {
    }

    // GUI
    private void OnGUI()
    {
        // LogIn/Register Button
        var rect = new Rect(Screen.width * USER_LOG_IN_X,
                            Screen.height * USER_LOG_IN_Y,
                            Screen.width * USER_LOG_IN_WIDTH,
                            Screen.height * USER_LOG_IN_HEIGHT);

        if (string.IsNullOrEmpty(CONSUMER_KEY) || string.IsNullOrEmpty(CONSUMER_SECRET))
        {
            string text =
                "You need to register your game or application first.\n Click this button, register and fill CONSUMER_KEY and CONSUMER_SECRET of Demo game object.";
            if (GUI.Button(rect, text))
            {
                Application.OpenURL("http://dev.twitter.com/apps/new");
            }
        }
        else
        {
            string text = string.Empty;

            if (!string.IsNullOrEmpty(m_AccessTokenResponse.ScreenName))
            {
                text = m_AccessTokenResponse.ScreenName + "\nClick to register with a different Twitter account";
            }
            else
            {
                text = "You need to register your game or application first.";
            }

            if (GUI.Button(rect, text))
            {
                StartCoroutine(API.GetRequestToken(CONSUMER_KEY, CONSUMER_SECRET,
                                                   OnRequestTokenCallback));
            }
        }

        // PIN Input
        rect.x = Screen.width * PIN_INPUT_X;
        rect.y = Screen.height * PIN_INPUT_Y;
        rect.width = Screen.width * PIN_INPUT_WIDTH;
        rect.height = Screen.height * PIN_INPUT_HEIGHT;

        m_PIN = GUI.TextField(rect, m_PIN);

        // PIN Enter Button
        rect.x = Screen.width * PIN_ENTER_X;
        rect.y = Screen.height * PIN_ENTER_Y;
        rect.width = Screen.width * PIN_ENTER_WIDTH;
        rect.height = Screen.height * PIN_ENTER_HEIGHT;

        if (GUI.Button(rect, "Enter PIN"))
        {
            StartCoroutine(API.GetAccessToken(CONSUMER_KEY, CONSUMER_SECRET, m_RequestTokenResponse.Token, m_PIN,
                                              OnAccessTokenCallback));
        }

        // Tweet Input
        rect.x = Screen.width * TWEET_INPUT_X;
        rect.y = Screen.height * TWEET_INPUT_Y;
        rect.width = Screen.width * TWEET_INPUT_WIDTH;
        rect.height = Screen.height * TWEET_INPUT_HEIGHT;

        m_Tweet = GUI.TextField(rect, m_Tweet);

        // Post Tweet Button
        rect.x = Screen.width * POST_TWEET_X;
        rect.y = Screen.height * POST_TWEET_Y;
        rect.width = Screen.width * POST_TWEET_WIDTH;
        rect.height = Screen.height * POST_TWEET_HEIGHT;

        if (GUI.Button(rect, "Post Tweet"))
        {
            StartCoroutine(API.PostTweet(m_Tweet, CONSUMER_KEY, CONSUMER_SECRET, m_AccessTokenResponse,
                                         OnPostTweet));
        }
    }

    private void LoadTwitterUserInfo()
    {
        m_AccessTokenResponse = new AccessTokenResponse();

        m_AccessTokenResponse.UserId = PlayerPrefs.GetString(PLAYER_PREFS_TWITTER_USER_ID);
        m_AccessTokenResponse.ScreenName = PlayerPrefs.GetString(PLAYER_PREFS_TWITTER_USER_SCREEN_NAME);
        m_AccessTokenResponse.Token = PlayerPrefs.GetString(PLAYER_PREFS_TWITTER_USER_TOKEN);
        m_AccessTokenResponse.TokenSecret = PlayerPrefs.GetString(PLAYER_PREFS_TWITTER_USER_TOKEN_SECRET);

        if (!string.IsNullOrEmpty(m_AccessTokenResponse.Token) &&
            !string.IsNullOrEmpty(m_AccessTokenResponse.ScreenName) &&
            !string.IsNullOrEmpty(m_AccessTokenResponse.Token) &&
            !string.IsNullOrEmpty(m_AccessTokenResponse.TokenSecret))
        {
            string log = "LoadTwitterUserInfo - succeeded";
            log += "\n    UserId : " + m_AccessTokenResponse.UserId;
            log += "\n    ScreenName : " + m_AccessTokenResponse.ScreenName;
            log += "\n    Token : " + m_AccessTokenResponse.Token;
            log += "\n    TokenSecret : " + m_AccessTokenResponse.TokenSecret;
            Debug.Log(log);
        }
    }

    private void OnRequestTokenCallback(bool success, RequestTokenResponse response)
    {
        if (success)
        {
            string log = "OnRequestTokenCallback - succeeded";
            log += "\n    Token : " + response.Token;
            log += "\n    TokenSecret : " + response.TokenSecret;
            print(log);

            m_RequestTokenResponse = response;

            API.OpenAuthorizationPage(response.Token);
        }
        else
        {
            print("OnRequestTokenCallback - failed.");
        }
    }

    private void OnAccessTokenCallback(bool success, AccessTokenResponse response)
    {
        if (success)
        {
            string log = "OnAccessTokenCallback - succeeded";
            log += "\n    UserId : " + response.UserId;
            log += "\n    ScreenName : " + response.ScreenName;
            log += "\n    Token : " + response.Token;
            log += "\n    TokenSecret : " + response.TokenSecret;
            print(log);

            m_AccessTokenResponse = response;

            PlayerPrefs.SetString(PLAYER_PREFS_TWITTER_USER_ID, response.UserId);
            PlayerPrefs.SetString(PLAYER_PREFS_TWITTER_USER_SCREEN_NAME, response.ScreenName);
            PlayerPrefs.SetString(PLAYER_PREFS_TWITTER_USER_TOKEN, response.Token);
            PlayerPrefs.SetString(PLAYER_PREFS_TWITTER_USER_TOKEN_SECRET, response.TokenSecret);
        }
        else
        {
            print("OnAccessTokenCallback - failed.");
        }
    }

    private void OnPostTweet(bool success)
    {
        print("OnPostTweet - " + (success ? "succedded." : "failed."));
    }
}

我的目的是给玩家一个特别的分数,如果他们通过twitter分享,这意味着我还必须确认他们发布了一些东西,等等。如果你是使用插件打开的。我建议使用Soomla社交媒体插件。你可以在这里找到它:

在推特上更新状态只需在Soomla上打个简单的电话。见下文

SoomlaProfile.updateStore( Provider.TWITTER, “看看苏姆拉写的这个伟大的故事吧!”,
“苏姆拉才2岁!”, “苏姆拉正在成长”, “很快2年”, “someLink”, “someLink”,
新警徽奖励(“警长”、“警长”)

能否将代码添加到文本正文而不是代码的图像中?它使人们更容易测试您正在做什么,并帮助您解决问题;)我刚刚添加了它,但是出于某种原因StackOverflow不想在一个框中显示所有内容?我试过了。尽管如此,您需要使用编辑器中的代码格式化工具,正如我刚才的编辑一样-选择代码并单击。有一个预览窗口用于此目的。我设法将脚本修复到演示的程度,允许我从twitter网站获取“Pin”,但我必须复制它,返回应用程序,粘贴它,然后我才能发布帖子?我不明白。twitter不只是请求一个应用程序的授权,然后你就可以发布你想要的所有东西吗?我该怎么做?