【问题标题】:how to open up an editable dialog to post a tweet如何打开可编辑对话框以发布推文
【发布时间】:2013-09-13 22:45:26
【问题描述】:

我想知道当我单击一个按钮打开一个带有预定义消息的对话框时,是否有一种方法,用户可以(i)编辑(文本字段)(ii)取消(按钮)和( iii)按确定(按钮)因此发推文。 我正在使用带有以下链接的 codebird 模块和钛 https://gist.github.com/Rogichi/5905010 这使我能够发送一条推文,但只有一组文本,无法编辑、按确定或取消。此外,它仅适用于您第一次在手机上运行该应用程序,之后,我必须卸载并重新安装才能再次发送。 任何帮助都将不胜感激

【问题讨论】:

  • @Josiah Hester 你似乎有点像钛大师。如果您在我之前处理过这个问题,我会很感激您提供的任何建议

标签: javascript android ios twitter titanium


【解决方案1】:

您必须创建带有两个按钮和一个文本区域的窗口,以便用户可以撰写自己的推文。我设法使用您提到的codebird文件做到了这一点,您所要做的就是像这样编辑setTweet函数:(其他一切保持不变,这样做可以发送尽可能多的推文而无需重新启动应用程序。祝你好运)

function setTweet(){
    var post = Ti.UI.createButton({
        title : 'Send',
        right: 10,
        width: 80,
        height: 30,
        top: 10
    });
    var content = Ti.UI.createTextArea({
      color: '#888',
      font: {fontSize:20, fontWeight:'bold'},
      textAlign: 'left',
      value: 'compose a tweet',
      top: 60,
      width: 280, height : 140
    });
    var floatW = Ti.UI.createWindow({
        backgroundColor:'#fff',
        borderWidth:8,
        borderColor:'#999',
        height:200,width:300,
        borderRadius:10
    });
    floatW.add(post);
    floatW.add(content);
    floatW.open();
    post.addEventListener('click', function(e){
        var tweet = content.getValue();
        cb.__call(
            "statuses_update",
                {"status": tweet },
                    function (reply) {
                    Ti.API.info("Respuesta al publicar: ");// ...
                    Ti.API.info(reply);// ...
                        ///////////INSPECT OBJECT
                    function inspeccionar(obj){
                        var msg = '';
                        for (var property in obj){
                            if (typeof obj[property] == 'function')
                            {
                                var inicio = obj[property].toString().indexOf('function');
                                var fin = obj[property].toString().indexOf(')')+1;
                                var propertyValue=obj[property].toString().substring(inicio,fin);
                                msg +=(typeof obj[property])+' '+property+' : '+propertyValue+' ;\n';
                            }
                            else if (typeof obj[property] == 'unknown')
                            {
                                msg += 'unknown '+property+' : unknown ;\n';
                            }
                            else
                                {
                                    msg +=(typeof obj[property])+' '+property+' : '+obj[property]+' ;\n';
                                }
                        }
                        return msg;
                        }

                //Ti.API.info(inspeccionar(reply));
                //Ti.API.info(inspeccionar(reply.errors[0]));
                    //Ti.API.info(reply.httpstatus);

                if(reply.httpstatus == 200)
                        floatW.close();
                    else
                        alert(reply.errors);
                }
        );
    });
}

【讨论】:

  • 太有帮助了。非常感谢
  • 这段代码可以自己运行,但是当集成到我的应用程序中时,我从来没有通过加载访问令牌警报。我在所有情况下都发出了额外的警报,我发现它在 if (file.exists() == false){ return; } 陈述。知道为什么该文件不存在吗?
  • 我想通了。我的应用程序中有两个模块实例,因此一个需要是 var cb= new Codebird,另一个必须是不同的,即 var cb2 等,因为在这两种情况下,承载令牌等都会发生很多事情
【解决方案2】:

我只会使用module like this one on the marketplaceDawson Toth. 的代码

您必须创建实际窗口来发送推文和编辑消息,这应该可以帮助您开始:

// Set up twitter first
var social = require('social');
var twitter = social.create({
    site : 'Twitter',
    consumerKey : '*****',
    consumerSecret : '*****' // <--- and this with your own keys!
 });

// Now create your popup window 
var win = Ti.UI.createWindow({layout : 'vertical'});
var tweettext = Ti.UI. createTextField({
  hintText : 'Enter what you want to tweet...',
  borderStyle: Ti.UI.INPUT_BORDERSTYLE_ROUNDED,
  color: '#336699',
  height: 60
});
var send = Ti.UI.createButton({title : 'Send', height : 45});
send.addEventListener('click', function(e) {
    // Send the tweet with the text fields value
    twitter.share({
        message : tweettext.value,
        success : function() {
            alert('Tweeted!');
        },
        error : function(error) {
           alert('You have already shared this school on Twitter.');
        }
    });
});
// Cancel button closes the window
var cancel = Ti.UI.createButton({title : 'Cancel', height : 45});
cancel.addEventListener('click', function(e) { win.close(); });

// Add all controls and open the window as a modal
win.add(tweettext);
win.add(send);
win.add(cancel);
win.open({modal: true});

这应该给你的想法和足够的开始。尚未对此进行测试,您可能必须使用它。

【讨论】:

  • 感谢您。我已经尝试过您建议的模块,它打开了登录屏幕,但没有发送推文或在示例文件夹的 app.js 文件中没有任何这样做的示例。我在控制台中收到警告:[WARN][System.err(789)] {"errors": [{"message": "Twitter REST API v1 不再活动。请迁移到 API v1.1 .dev.twitter.com/docs/api/1.1/overview.", "code": 68}]} 所以自从新的 twitter API 发布以来,它似乎已经过时了。我将研究 Dawson Hoth 的代码。在您的代码中,您有 var social = require('social');
  • 这是我必须从市场下载的另一个模块吗?
  • 好的,我找到了模块。但是,该代码不起作用。它打开授权屏幕并通过进度条,然后打开一个页面,显示 404 错误,它不存在
【解决方案3】:

您可以在 web 视图中使用 twitter 意图 url

查看这个 StackOverflow 问题

Is there a way to launch a Twitter dialog for sending direct messages?

【讨论】:

    猜你喜欢
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多