2014-04-15 22 views
5

Tôi đang cố gắng để có liên kết ứng dụng PhoneGap của mình để mở một trang tiểu sử người dùng cụ thể trong ứng dụng Twitter. Tôi biết không phải ai cũng có ứng dụng Twitter được cài đặt trên thiết bị của họ vì vậy tôi muốn gửi chúng đến Cửa hàng Play để tải xuống ứng dụng nếu chúng không.Làm cách nào để mở ứng dụng Twitter và Facebook bằng Phonegap?

Vấn đề là mỗi khi tôi nhấn vào liên kết trên thiết bị Android của tôi, tôi nhận được một lỗi:

Application Error: 

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

My JavaScript là như sau:

//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'); 
}); 

Những điều mà tôi đã cố gắng:

  • Sử dụng twitter:/// thay vì twitter://
  • Thêm <access origin="twitter://user?screen_name=xerxesnoble" /> để tôi config.xml

Tôi không chắc chắn những gì khác để thử, không có gì đang làm việc cho Facebook hoặc nhưng ngay bây giờ tôi đang tập trung vào một vấn đề cùng một lúc.

+0

Thay đổi nguồn gốc truy cập thành đơn giản và phổ biến: Regent

+0

Tôi cũng đã làm điều đó . – XerxesNoble

Trả lời

14

Sự cố là plugin InAppBrowser chưa được cài đặt. Các phiên bản mới của PhoneGap/Cordova không đi kèm với tất cả các plugin được cài đặt - thay vào đó bạn chọn những gì bạn muốn Ứng dụng của mình có quyền truy cập.

Trong terminal cd yourApp$ cordova plugin add org.apache.cordova.inappbrowser

Sau khi làm điều đó, nó đã làm việc một cách hoàn hảo.

EDIT

Chỉ cần đến chi nhánh hiểu thêm một chút về cách tôi đã .js của tôi để kiểm tra xem twitter đã được cài đặt hay không.

Tôi đã cài đặt một plugin: AppAvailability for iOS and Android

Sau đó, tôi thay đổi .js của tôi trông như thế này:

//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');}; 
}); 
}; 
}; 

Các tài liệu quy định tại các plugin AppAvailability was very helpful cũng>

Hope rằng điều này giúp một ai đó!

+0

bạn có thể mở trang facebook trong ứng dụng facebook không? – Priyanka

4

Chỉ cần một tài liệu tham khảo cho những người khác có thể đến đây và muốn có một chút:

tôi đã có thể để có được điều này làm việc tốt (cho đến nay) trên cả iOS và Android, và tự động rơi lại cho trình duyệt sử dụng mã bên dưới.

plugins buộc là cordova-plugin-inappbrowsercordova-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); 
    } 
} 

Sử dụng nó rất dễ dàng, chỉ cần gọi phương thức openBrowser(url) với một url trang web bình thường. Vấn đề duy nhất tôi thấy là đối với một trang facebook, nó cần một ID không phải là tên slug

+1

Cảm ơn vì điều này. Rất hữu dụng! Tên gói cho Twitter trong Android là 'com.twitter.android' – Yogster

Các vấn đề liên quan