2015-08-11 26 views
8

Używam wtyczki udostępniania społecznościowego do udostępniania wiadomości i zdjęć z mojej aplikacji mobilnej do Facebooka i Twittera,
Aplikacja wyświetli alert o "udanym udostępnieniu", jeśli udostępnianie oznacza sukces i wyświetli komunikat "udostępnianie anulowane", jeśli wtyczka wyświetli komunikat o błędzie.
Na facebooku działa jak zaklęcie, ale na Twitterze jest problem. Działa dobrze we wszystkich scenariuszach z wyjątkiem Duplikatów tweetów (osoba dzieląca ten sam tweet więcej niż raz), oba alerty są uruchamiane, gdy wszystkie warunki wtyczki są spełnione (połączenie z Internetem, uwierzytelnianie użytkownika, poprawna wiadomość), ale aplikacja Twittera w telefonie późno wysyła błąd "duplikatów tweetów". Każdy tutaj powinien pomóc mi znaleźć ten komunikat o błędzie przed uruchomieniem alertów.Phonegap/cordova Wtyczka udostępniania społecznościowego, zduplikowany numer tweetowy

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);}); 
} 
+0

Niedawno znaleźć za pośrednictwem tego bloga http://cases.azoft.com/facebook-twitter-integration/ że błędu zwrócony przez Twitter nie może być obsłużony przez klienta czy są jakieś inne rozwiązania? – Vignesh

Odpowiedz

1

Ten kod jest naprawdę dziwny. Jeśli dzielisz tweet z:

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

I chcesz poinformować użytkownika, że ​​ćwierkanie nie powiodła się, należy użyć errorCallback aby ostrzec użytkownika, że ​​ćwierkanie zawiodły.

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

--additional code--

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()}); 
} 
+0

po prostu zignoruj ​​lokalną część pamięci, której używamy do obsługi sesji i podobnych rzeczy, problem polega na tym, że "TWITTER NIGDY NIE POZWALA NA PODOBNE TĘTNICE" – Geek

+0

Obie żądania są asynchroniczne, więc podczas wywoływania funkcji canShareVia w rzeczywistości nie sprawdzasz błędu od czasu błędu sprawdzenie kodu zostanie uruchomione przed ustawieniem dowolnego komunikatu o błędzie. –

+1

Tak, to prawda, ale canShareVia w rzeczywistości nie sprawdza błędu po wejściu do aplikacji Twitter, a ten błąd jest spowodowany mechanizmem spamu twitter, więc nie zostanie przechwycony w canShareVia – Geek