Phonegap/cordova 社交分享插件,重复推文问题

Posted

技术标签:

【中文标题】Phonegap/cordova 社交分享插件,重复推文问题【英文标题】:Phonegap/cordova Social sharing plugin , Duplicate tweet issue 【发布时间】: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););

【问题讨论】:

我最近通过这个博客cases.azoft.com/facebook-twitter-integration发现twitter返回的错误无法由客户端处理,还有其他解决方案吗? 【参考方案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)

以上是关于Phonegap/cordova 社交分享插件,重复推文问题的主要内容,如果未能解决你的问题,请参考以下文章

适用于 iOS 的 Phonegap/Cordova 日历插件无响应

重命名后新的 PhoneGap / Cordova iOS 项目将无法运行

Phonegap (Cordova) 2.7.0 + Mapkit 插件 + 入门

Phonegap/Cordova - 套接字插件最终得到: undefined is not a function in cordova.js

Phonegap Cordova 插件在构建时删除

使用 Phonegap/Cordova 相机插件从相机或图库中选择照片