CocoonJS应用程序发布推文和图像

时间:2015-03-03 22:53:20

标签: javascript oauth twitter-oauth cocoonjs hello.js

多天以来,我一直在研究集成Twitter功能的可能性,以便将截图发布到我正在使用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);
    });
}

但是当通过CocoonJS启动器进行测试时,我收到以下错误:

IDTK_LOG_ERROR: [JS] Invoked in void ludei::js::utils::JSUtilities::PrintException line 95: JavaScript Exception (Line: 1337 Tag: 'touchend'): TypeError: undefined is not an object (evaluating 'this.document.cookie.split')

在设备上,弹出窗口没有出现。

然后我试着看一下使用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" );
}

这给了我一个重复的错误:

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

在设备上,除了一个小徽标之外,屏幕变黑了,我记得当我在桌面浏览器上测试此功能时,我会记得看到弹出窗口的一部分要求进行身份验证。

这些错误信息对我来说并不是很重要,不幸的是,当我在iOS上运行应用程序(通过CocoonJS Launcher)时,我无法调试CocoonJS,因为我只在Android上提供此功能。

我想知道我想要实现的目标是由CocoonJS中的任何人完成的,以及我所要求的是否真的可行,显然如何让它正常工作! =)

非常感谢任何帮助。

由于 富

1 个答案:

答案 0 :(得分:0)

CocoonJS中的Canvas +环境没有Cookie支持,也没有大DOM支持。它(如名称所示)仅限Canvas环境。你有一些选择(警告:没有测试过它们):

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

有关Canvas +和WebView(理论)的更多信息: http://support.ludei.com/hc/en-us/articles/200807797-Canvas-Webview

对于最新的扩展API: http://doc.ludei.com/3.0.5/Cocoon.WebView.html

3.-只需直接为您的应用选择WebView +即可。它可能不如Canvas +那样高效,但它是一个完整的浏览器,因此所有这些代码都可以工作。

我的推荐?首先测试3。如果它对你来说是个不错的选择,那就去吧(理解它的局限性)。如果你真的想要使用Canvas +,请先快速测试1,如果它不合适,那么2。

希望这有帮助。