Javascript CocoonJS应用程序发布推文和图片

Javascript CocoonJS应用程序发布推文和图片,javascript,oauth,twitter-oauth,cocoonjs,hello.js,Javascript,Oauth,Twitter Oauth,Cocoonjs,Hello.js,几天来,我一直在研究将推特功能与屏幕截图集成到我正在与CocoonJS开发的游戏中的可能性。CocoonJS并没有提供这种开箱即用的功能(尽管它在Facebook上提供)。我一直在研究OAuth,并尝试使用信任,试图让应用程序能够向用户提供登录信息。这是通过浏览器成功实现的。用于此操作的代码是: test1 = function() { var tempLogo = "<base64EncodedImg>"; OAuth.initialize("<public

几天来,我一直在研究将推特功能与屏幕截图集成到我正在与CocoonJS开发的游戏中的可能性。CocoonJS并没有提供这种开箱即用的功能(尽管它在Facebook上提供)。我一直在研究OAuth,并尝试使用信任,试图让应用程序能够向用户提供登录信息。这是通过浏览器成功实现的。用于此操作的代码是:

test1 = function() {
    var tempLogo = "<base64EncodedImg>";
    OAuth.initialize("<public key>", {cache:true});
    OAuth.popup("twitter").then(function(result) {
        var data = new FormData();
        data.append('status', 'This is a test');
        data.append('media[]', Utils.b64toBlob(tempLogo), 'logo.png');

        return result.post('/1.1/statuses/update_with_media.json', {
            data: data,
            cache:false,
            processData: false,
            contentType: false
        });
    }).done(function(data){
        var str = JSON.stringify(data, null, 2);
        console.log("Success: " + str);
    }).fail(function(e){
        var errorTxt = JSON.stringify(e, null, 2);
        console.log("Success: " + errorTxt);
    });
}
在设备上,弹出窗口没有出现

然后我试着看看如何使用hello.js。当我在浏览器中运行时,我再次能够在我的游戏中快速启动和运行他们的演示。我使用了以下代码:

test2 = function() {
    hello.init({
        'twitter' : '<twitter client id>'
    },
    {   
        redirect_uri:'redirect.html',
    });

    // Twitter instance
    var twitter = hello('twitter');
    // Login
    twitter.login().then( function(r){
        // Get Profile
        return twitter.api('me');
    }, "LOG" )
        .then( function(p){
            // Put in page
            document.getElementById('login').innerHTML = "<img src='"+ p.thumbnail + "' width=24/>Connected to "+ 'twitter'+" as " + p.name;
    }, "LOG" );
}
在设备上,除了一个小徽标外,屏幕变黑了。我记得我在桌面浏览器上测试这项功能时,看到一个小徽标,它是请求验证的弹出窗口的一部分

这些错误消息对我来说意义不大,不幸的是,当我在iOS上运行CocoonJS应用程序时(通过CocoonJS Launcher),我无法调试CocoonJS,因为我只在Android上提供了这个功能

我只是想知道我想要实现的目标是否已经被CocoonJS中的任何人完成了,我所要求的是否真的是可能的,以及如何让它工作!=)

任何帮助都将不胜感激

谢谢
Rich

CocoonJS中的Canvas+环境既不支持Cookie,也不支持大DOM。它(顾名思义)是一个纯画布环境。但您有一些选项(警告:尚未测试):

1.-将用户发送到系统浏览器。您可以打开传递URL的系统浏览器。我真的不知道这是否是一个选择。 2.-在WebView中为此打开会话。CocoonJS允许使用扩展API在WebView上加载甚至显示内容。您将有两个运行的环境:Canvas+和WebView,在其中每个环境中加载完全不同的web内容。好消息是您可以在它们之间传递消息(eval-s)

有关Canvas+和WebView(理论)的更多信息:

有关最新的扩展API:

3.-直接为你的应用选择WebView+。它的性能可能不如Canvas+,但它是一个完整的抓取浏览器,所以所有这些代码都应该可以工作

我的推荐?先测试3。如果这对你来说是一个好的选择,那么就去做(理解它的局限性)。如果您确实想使用Canvas+,请先快速测试1,如果不适合,则测试2


希望这能有所帮助。

谢谢您如此全面的回答!选项3,我已经在WebView(+)中测试了我的游戏。我不能认为这是一个选项,因为帧率真的不好,然而,游戏运行在完全60fps的画布+。关于选项1,我只能通过HTTP POST(使用base64编码的图像)发送带有图像的tweet,因此我认为我不能使用此选项。选项2,我不知道!我可以看到这一点,但我认为通过WebView发布HTTP帖子是不可能的,因为我必须将它指向一个远程URL。我会进一步调查的。如果你还有其他想法,我很高兴听到:)
test2 = function() {
    hello.init({
        'twitter' : '<twitter client id>'
    },
    {   
        redirect_uri:'redirect.html',
    });

    // Twitter instance
    var twitter = hello('twitter');
    // Login
    twitter.login().then( function(r){
        // Get Profile
        return twitter.api('me');
    }, "LOG" )
        .then( function(p){
            // Put in page
            document.getElementById('login').innerHTML = "<img src='"+ p.thumbnail + "' width=24/>Connected to "+ 'twitter'+" as " + p.name;
    }, "LOG" );
}
IDTK_LOG_ERROR: [JS] Invoked in void ludei::js::utils::JSUtilities::PrintException line 95: JavaScript Exception (Line: 13 Tag: 'timer'): TypeError: undefined is not an object (evaluating 'e.value.length')