多天以来,我一直在研究集成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中的任何人完成的,以及我所要求的是否真的可行,显然如何让它正常工作! =)
非常感谢任何帮助。
由于 富
答案 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。
希望这有帮助。