CocoonJS приложение для публикации твитов и изображений
В течение нескольких дней я искал возможность интеграции функциональности 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')
На устройстве экран потемнел, за исключением небольшого логотипа, который, как я помню, был частью всплывающего окна с запросом аутентификации, который сработал, когда я тестировал эту функцию в браузере настольного компьютера.
Эти сообщения об ошибках не имеют большого значения для меня, и, к сожалению, я не могу отладить CocoonJS, когда я запускаю приложение на iOS (через CocoonJS Launcher), так как эту функцию я представляю только на Android.
Хотелось бы просто узнать, было ли сделано кем-то в CocoonJS то, чего я пытаюсь достичь, и действительно ли то, что я запрашиваю, действительно возможно, и, очевидно, как заставить это работать! знак равно
Любая помощь приветствуется.
Спасибо Рич
1 ответ
Среда Canvas+ в CocoonJS не поддерживает ни Cookies, ни большую поддержку DOM. Это (как следует из названия) только среда Canvas. У вас есть несколько вариантов (предупреждение: не проверял их):
1.- Отправьте пользователя в системный браузер. Вы можете открыть системный браузер, передав URL-адрес. Не знаю, может ли это быть вариантом. 2. Откройте сеанс для этого в WebView. CocoonJS позволяет использовать API расширения для загрузки и даже показа контента в WebView. У вас будут работать две среды: Canvas+ и WebView, загружающие совершенно разные веб-материалы в каждую из них. Хорошей новостью является то, что вы можете передавать сообщения (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.
Надеюсь это поможет.