0

几天来,我一直在研究是否有可能将 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 中的任何人是否已经完成了我想要实现的目标,以及我所要求的是否真的可行,以及如何让它发挥作用!=)

任何帮助将非常感激。

谢谢丰富

4

1 回答 1

0

CocoonJS 中的 Canvas+ 环境不支持 Cookies,也不支持大 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。

希望这可以帮助。

于 2015-03-04T17:58:11.790 回答