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.

Надеюсь это поможет.

Другие вопросы по тегам