2014-04-15 8 views
5

Ich versuche mit meinem PhoneGap-Anwendungslink eine bestimmte Benutzerprofilseite in der Twitter-App zu öffnen. Ich weiß, dass nicht jeder die Twitter App auf ihrem Gerät installiert hat, also wollte ich sie zum Play Store schicken, um sie herunterzuladen, wenn sie es nicht getan haben.Wie öffnet man Twitter und Facebook App mit Phonegap?

Problem ist, dass jedes Mal, wenn ich den Link auf meinem Android-Gerät tippen erhalte ich eine Fehlermeldung:

Application Error: 

net::ERR_UNKNOWN_URL_SCHEME(twitter://user?screen_name=xerxesnoble) 

Mein JavaScript ist wie folgt:

//If Android 

var ua = navigator.userAgent.toLowerCase(); 
var isAndroid = ua.indexOf("android") > -1; //&& ua.indexOf("mobile"); 

if (isAndroid) { 

    alert('Android!'); 

    twitterCheck = function() { 
     alert('Android!'); 
     var now = new Date().valueOf(); 

     setTimeout(function() { 
      if (new Date().valueOf() - now > 100) return; 
      window.open('https://play.google.com/store/apps/details?id=com.twitter.android', '_system', 'location=no'); 
     }, 50); 

    window.open('twitter://user?screen_name=XerxesNoble', '_system', 'location=no'); 
    }; 
}; 

$('.twiterNav').click(function() { 
    window.open('twitter://user?screen_name=xerxesnoble', '_system', 'location=no'); 
}); 

Dinge, die ich versucht habe:

  • Mit twitter:/// statt twitter://
  • <access origin="twitter://user?screen_name=xerxesnoble" /> meinen config.xml

Ich bin nicht sicher, was sonst noch hinzufügen, um zu versuchen, ist nichts für Facebook arbeiten entweder, aber jetzt zu einem Zeitpunkt auf einem Thema konzentriere ich mich.

+0

Zugriff auf den Ursprung zu einfachen und universellen ändern muss: Regent

+0

Ich habe das auch getan . – XerxesNoble

Antwort

14

Das Problem ist, dass das InAppBrowser-Plugin nicht installiert wurde. Neue Versionen von PhoneGap/Cordova sind nicht mit allen installierten Plug-Ins verfügbar. Stattdessen wählen Sie aus, auf was Ihre App zugreifen soll.

In Terminal cd yourApp und $ cordova plugin add org.apache.cordova.inappbrowser

Danach tun, es funktionierte perfekt.

EDIT

Nur ein bisschen mehr auf, verzweigen sich, wie ich meine Js bekam, wenn twitter installiert wurde oder nicht zu überprüfen.

ich installiert ein anderes Plugin: AppAvailability for iOS and Android

Dann veränderte ich meine Js wie folgt aussehen:

//Twitter checker 

// If Mac// 

var twitterCheck = function(){ 

appAvailability.check('twitter://', function(availability) { 
    // availability is either true or false 
    if(availability) { window.open('twitter://user?screen_name=xerxesnoble', '_system', 'location=no');} 
    else{window.open('https://itunes.apple.com/ca/app/twitter/id333903271?mt=8', '_system', 'location=no'); }; 
}); 
}; 

//If Android 

var ua = navigator.userAgent.toLowerCase(); 
var isAndroid = ua.indexOf("android") > -1; //&& ua.indexOf("mobile"); 

if(isAndroid) { 

twitterCheck = function(){  

appAvailability.check('com.twitter.android', function(availability) { 
    // availability is either true or false 
    if(availability) {window.open('twitter://user?screen_name=xerxesnoble', '_system', 'location=no');} 
    else{window.open('https://play.google.com/store/apps/details?id=com.twitter.android', '_system', 'location=no');}; 
}); 
}; 
}; 

Die Dokumentation im Plugin sehr hilfreich war AppAvailability zur Verfügung gestellt als auch>

Hoffnung dass das jemandem hilft!

+0

konnten Sie Facebook-Seite in Facebook App öffnen? – Priyanka

4

Nur eine Referenz für andere, die hier kommen könnten und wollen ein bisschen mehr:

Ich habe in der Lage gewesen, diese gut funktionieren zu erhalten (bisher) auf beiden iOS und Android, und dynamisch an den Browser zurück fallen Verwenden Sie den folgenden Code.

Erforderliche Plugins sind cordova-plugin-inappbrowser und cordova-plugin-appavailability

function openBrowser (url) { 
    if (!url) { 
     return; 
    } 

    // turn my url into a scheme/intent url 
    getAvailabilityScheme(url, function (url) { 
     window.open(url, '_system'); 
    }); 
} 

function getAvailabilityScheme (url, callback) { 
    var schemeOrPackage; 
    var schemeUrl; 

    // check for appavaialbility plugin 
    if (!window.appAvailability) { 
     callback(url); 
    } 

    // facebook 
    if (url.indexOf('facebook.com/') !== -1) { 
     schemeOrPackage = isAndroid ? 'com.facebook.katana' : 'fb://' 
     schemeUrl = 'fb://profile/' + url.split('facebook.com/')[1]; 
    } 

    // twitter 
    if (url.indexOf('twitter.com/') !== -1) { 
     schemeOrPackage = isAndroid ? null : 'twitter://' 
     schemeUrl = 'twitter://user?screen_name=' + url.split('twitter.com/')[1]; 
    } 

    if (schemeOrPackage && schemeUrl) { 
     window.appAvailability.check(schemeOrPackage, function() { 
      callback(schemeUrl); 
     }, function() { 
      callback(url); 
     }); 
    } else { 
     callback(url); 
    } 
} 

es ist einfach, rufen Sie einfach die openBrowser(url) Methode mit einer URL normalen Website. Das einzige Problem, das ich fand, war, dass es für eine Facebook-Seite, eine ID nicht die Slug-Name

+1

Danke dafür. Sehr hilfreich! Der Paketname für Twitter in Android lautet 'com.twitter.android' – Yogster

Verwandte Themen