【问题标题】:Phonegap/cordova Social sharing plugin , Duplicate tweet issuePhonegap/cordova 社交分享插件,重复推文问题
【发布时间】:2015-08-11 07:01:14
【问题描述】:

我正在使用社交分享插件将消息和图片从我的移动应用程序分享到 Facebook 和 twitter,
如果共享成功,应用程序将显示“共享成功”的警报,如果插件显示任何错误消息,应用程序将显示“共享已取消”。
对于 facebook,它就像一个魅力,但在 twitter 中存在一个问题。它适用于所有场景,除了重复推文(人多次分享同一推文)两个警报都被触发,因为插件的所有条件都满足(互联网连接、用户身份验证、有效消息),但手机中的 twitter 应用程序延迟抛出“重复推文”错误。在触发警报之前,请在这里的任何人帮助我找到该错误消息。

function shareViaTwitter(id, message, image, url) {
    canShareViaTwitter();
    message = message.replace(/<br *\/?>/gi,'\n');

var successmessage  = window.localStorage.getItem('canshareTwitsuccess');
var errormessage    = window.localStorage.getItem('canshareTwiterror');

if(errormessage != '' && errormessage != 'null' && errormessage != null)
{
    navigator.app.loadUrl('https://play.google.com/store/apps/details?id=com.twitter.android&hl=en', { openExternal:true });
    reloadPage();
}
else
{   
    if(navigator.onLine) {
        var isAndroid = /android/i.test(navigator.userAgent.toLowerCase());

        if(isAndroid) {
            message = (message) ? message : null;
            image = (image) ? image : null;
            url = (url) ? url : null;

            window.plugins.socialsharing.shareViaTwitter(message, image, url, function(msg){}, function(msg){});
            $("#sharingText").html("Shared Successfully");
            $('#sharing-sucess-trigger').trigger('click');
        }
    } else {
        $("#sharingText").html("Shared Failed! \nNo Network Connection");
        $('#sharing-sucess-trigger').trigger('click');
    }
    reloadPage();
}
}

function canShareViaFacebook()
{
    //alert("canshare")
    window.plugins.socialsharing.canShareVia('com.facebook.katana', 'msg', null, null, null, function(fbsuccess){window.localStorage.setItem("canshareFbsuccess", fbsuccess);}, function(fberror){window.localStorage.setItem("canshareFberror", fberror);});
}

function canShareViaTwitter()
{
    //alert("canshare")
    window.plugins.socialsharing.canShareVia('twitter', 'msg', null, null, null, function(twitsuccess){window.localStorage.setItem("canshareTwitsuccess", twitsuccess);}, function(twiterror){window.localStorage.setItem("canshareTwiterror", twiterror);});
}

【问题讨论】:

标签: javascript twitter phonegap-plugins cordova-plugins


【解决方案1】:

这段代码真的很奇怪。如果您与以下人员分享推文:

socialsharing.shareViaTwitter(message, file, url, successCallback, errorCallback)

如果你想告诉用户推文失败,你会使用 errorCallback 来提醒用户推文失败。

function errorCallback(msg){
    alert(msg);
}

--附加代码--

function shareViaTwitter(id, message, image, url) {
    message = message.replace(/<br *\/?>/gi,'\n');
    canShareViaTwitter(function(){
        if(navigator.onLine) {
            var isAndroid = /android/i.test(navigator.userAgent.toLowerCase());

            if(isAndroid) {
                message = (message) ? message : null;
                image = (image) ? image : null;
                url = (url) ? url : null;

                window.plugins.socialsharing.shareViaTwitter(message, image, url, function(msg){}, function(msg){});
                $("#sharingText").html("Shared Successfully");
                $('#sharing-sucess-trigger').trigger('click');
            }
        }
        else {
            $("#sharingText").html("Shared Failed! \nNo Network Connection");
            $('#sharing-sucess-trigger').trigger('click');
        }
        //why?
        reloadPage();
    },
    function(){
        navigator.app.loadUrl('https://play.google.com/store/apps/details?id=com.twitter.android&hl=en', { openExternal:true });
        reloadPage();
    });
}
function canShareViaTwitter(successCallback, errorCallback)
{
    //alert("canshare")
    window.plugins.socialsharing.canShareVia('twitter', 'msg', null, null, null, function(twitsuccess){window.localStorage.setItem("canshareTwitsuccess", twitsuccess);successCallback();}, function(twiterror){window.localStorage.setItem("canshareTwiterror", twiterror);errorCallback()});
}

【讨论】:

  • 忽略我们用于会话处理和类似内容的本地存储部分,问题是“推特永远不会允许类似的推文”
  • 两个请求都是异步的,因此当您调用 canShareVia 时,您实际上并没有检查错误,因为错误检查代码将在设置任何错误消息之前运行。
  • 是的没错,但是canShareVia在进入twitter应用后实际上并没有检查错误,这个错误是由于twitter的垃圾邮件预防机制,所以它不会被canShareVia捕获
  • 那么你为什么不能直接调用shareViaTwitter呢?为什么需要 canShareVia?我不认为这是您在致电之前必须检查的人之一(基于此处的文档:github.com/EddyVerbruggen/SocialSharing-PhoneGap-Plugin
猜你喜欢
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
相关资源
最近更新 更多