简体   繁体   English

如何使用Phonegap打开Twitter和Facebook应用程序?

[英]How to open Twitter and Facebook app with Phonegap?

I am trying to have my PhoneGap application link to open a specific users profile page in the Twitter app. 我正在尝试使用我的PhoneGap应用程序链接在Twitter应用程序中打开特定的用户个人资料页面。 I know not everyone has the Twitter app installed on their device so I wanted to send them to the Play Store to download it if they didn't. 我知道不是每个人都在他们的设备上安装了Twitter应用程序,所以我想将它们发送到Play商店下载它,如果他们没有。

Problem is that every time I tap the link on my Android device I receive an error: 问题是我每次点击Android设备上的链接时都会收到错误消息:

Application Error:

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

My JavaScript is as follows: 我的JavaScript如下:

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

Things that I've tried: 我试过的事情:

  • Using twitter:/// instead of twitter:// 使用twitter:///而不是twitter://
  • Adding <access origin="twitter://user?screen_name=xerxesnoble" /> to my config.xml <access origin="twitter://user?screen_name=xerxesnoble" />到我的config.xml

I'm not sure what else to try, nothing is working for Facebook either but right now I'm focusing on one issue at a time. 我不知道还有什么可以尝试,Facebook也没有任何工作,但是现在我一次只关注一个问题。

The Problem is that the InAppBrowser plugin was not installed. 问题是没有安装InAppBrowser插件。 New versions of PhoneGap/Cordova do not come with all plugins installed- instead you choose what you want your App to have access to. 新版本的PhoneGap / Cordova没有安装所有插件 - 而是选择您希望应用程序访问的内容。

In terminal cd yourApp and $ cordova plugin add org.apache.cordova.inappbrowser 在终端cd yourApp$ cordova plugin add org.apache.cordova.inappbrowser

After doing that, it worked perfectly. 完成后,它完美地工作。

EDIT 编辑

Just to branch out a little bit more on how I got my .js to check if twitter was installed or not. 只是为了分析我如何得到我的.js来检查是否安装了twitter。

I installed another plugin : AppAvailability for iOS and Android 我安装了另一个插件: 适用于iOS和Android的AppAvailability

Then I altered my .js to look like this: 然后我改变了我的.js看起来像这样:

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

The documentation provided in the AppAvailability plugin was very helpful as well> AppAvailability插件中提供的文档也非常有用>

Hope that this helps someone! 希望这有助于某人!

Just a reference for others who might come here and want a bit more: 对于可能来到这里并想要更多的其他人的参考:

I've been able to get this working well (so far) on both iOS and Android, and dynamically falling back to the browser using the code below. 我已经能够在iOS和Android上运行良好(到目前为止),并使用下面的代码动态地回退到浏览器。

Required plugins are cordova-plugin-inappbrowser and cordova-plugin-appavailability 所需的插件是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);
    }
}

Using it is easy, just call the openBrowser(url) method with a normal website url. 使用它很简单,只需使用普通网站URL调用openBrowser(url)方法即可。 The only issue i found was that for a facebook page, it needs to an ID not the slug name 我发现的唯一问题是,对于Facebook页面,它需要一个ID而不是slug名称

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM