Je veux rediriger l'utilisateur vers la page Facebook de mon application, j'ai donc le code suivant:
[[UIApplication sharedApplication] openURL:
[NSURL URLWithString: @"https://facebook.com/myAppsPage"]];
cela fonctionne très bien s'il n'y a pas d'application Facebook sur l'appareil. Ensuite, le lien s'ouvre dans Safari.
Si une application Facebook est installée sur l'appareil, puis, après l'exécution du code ci-dessus, l'application Facebook s'ouvre, mais affiche la chronologie des utilisateurs, pas la page de mon application. J'ai essayé de changer le lien en @"fb://pages/myAppsPage"
et en @"fb://profile/myAppsPage
, mais cela a de nouveau ouvert la chronologie des utilisateurs.
Ma question est donc la suivante: comment puis-je ouvrir ma page d'applications dans Safari, s'il n'y a pas d'application Facebook, ou dans l'application Facebook, si celle-ci est installée.
Vous devez utiliser l'ID facebook pour la page donnée plutôt que l'URL personnalisée. Pour obtenir l'ID de la page, entrez le nom de votre nom de la page à l'URL suivante et copiez la valeur correspondant à "id":
https://graph.facebook.com/yourappspage
Une fois que vous avez l'ID, vous pouvez configurer la méthode pour vérifier si le FB est installé à l'aide de la méthode canOpenURL et fournir le contenu approprié pour les deux états:
NSURL *facebookURL = [NSURL URLWithString:@"fb://profile/113810631976867"];
if ([[UIApplication sharedApplication] canOpenURL:facebookURL]) {
[[UIApplication sharedApplication] openURL:facebookURL];
} else {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://facebook.com"]];
}
J'étais heureux de trouver la réponse de skladek, alors voici ma contribution: Swift + autres réseaux sociaux.
J'ai trouvé qu'il me fallait 3 barres obliques pour Twitter et seulement 2 pour Facebook et Google+, je n'ai pas enquêté davantage que cela…
// Go to https://graph.facebook.com/PageName to get your page id
func openFacebookPage() {
let facebookURL = NSURL(string: "fb://profile/PageId")!
if UIApplication.sharedApplication().canOpenURL(facebookURL) {
UIApplication.sharedApplication().openURL(facebookURL)
} else {
UIApplication.sharedApplication().openURL(NSURL(string: "https://www.facebook.com/PageName")!)
}
}
func openTwitterProfile() {
let twitterURL = NSURL(string: "Twitter:///user?screen_name=USERNAME")!
if UIApplication.sharedApplication().canOpenURL(twitterURL) {
UIApplication.sharedApplication().openURL(twitterURL)
} else {
UIApplication.sharedApplication().openURL(NSURL(string: "https://Twitter.com/USERNAME")!)
}
}
func openGooglePlusPage() {
let googlePlusURL = NSURL(string: "gplus://plus.google.com/u/0/PageId")!
if UIApplication.sharedApplication().canOpenURL(googlePlusURL) {
UIApplication.sharedApplication().openURL(googlePlusURL)
} else {
UIApplication.sharedApplication().openURL(NSURL(string: "https://plus.google.com/PageId")!)
}
}
Une tentative de refactoring:
struct SocialNetworkUrl {
let scheme: String
let page: String
func openPage() {
let schemeUrl = NSURL(string: scheme)!
if UIApplication.sharedApplication().canOpenURL(schemeUrl) {
UIApplication.sharedApplication().openURL(schemeUrl)
} else {
UIApplication.sharedApplication().openURL(NSURL(string: page)!)
}
}
}
enum SocialNetwork {
case Facebook, GooglePlus, Twitter, Instagram
func url() -> SocialNetworkUrl {
switch self {
case .Facebook: return SocialNetworkUrl(scheme: "fb://profile/PageId", page: "https://www.facebook.com/PageName")
case .Twitter: return SocialNetworkUrl(scheme: "Twitter:///user?screen_name=USERNAME", page: "https://Twitter.com/USERNAME")
case .GooglePlus: return SocialNetworkUrl(scheme: "gplus://plus.google.com/u/0/PageId", page: "https://plus.google.com/PageId")
case .Instagram: return SocialNetworkUrl(scheme: "instagram://user?username=USERNAME", page:"https://www.instagram.com/USERNAME")
}
}
func openPage() {
self.url().openPage()
}
}
Maintenant, vous pouvez appeler:
SocialNetwork.Twitter.openPage()
Il semble que depuis la dernière réponse, Facebook a modifié le schéma des pages (le profil est le même qu'avant)
le page_id
fait maintenant partie de la requête d'URL . Donc, pour pouvoir rediriger vers l'application fb, l'URL doit être au format suivant:
fb://page/?id='your_page_numeric_id'
Assurez-vous également de mettre la liste fb
en liste blanche dans vos applications Info.plist
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
</array>
Au cas où il y aurait d'autres modifications ou si vous ne connaissez pas le page_id
de votre page Facebook, vous pouvez extraire l'URL iOS fb
précise de la source de votre page Web Facebook.
al:ios:url
Vous devriez pouvoir trouver:
<meta property="al:ios:url" content="fb://page/?id='your_page_numeric_id'">
Copier cette URL dans votre application, puis appeler:
guard let facebookURL = NSURL(string: "fb://page/?id='your_page_numeric_id'") else {
return
}
if (UIApplication.sharedApplication().canOpenURL(facebookURL)) {
UIApplication.sharedApplication().openURL(facebookURL)
} else {
guard let webpageURL = NSURL(string: "http://facebook.com/yourPage/") else {
return
}
UIApplication.sharedApplication().openURL(webpageURL)
}
devrait faire le travail.
Pour iOS 9, vous devez inclure dans la liste blanche les URL que votre application appellera pour utiliser la clé LSApplicationQueriesSchemes dans votre Info.plist.
Vérifiez ici .
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
<string>fbapi</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>fb-messenger-api</string>
<string>Twitter</string>
<string>whatsapp</string>
<string>wechat</string>
<string>line</string>
<string>instagram</string>
<string>kakaotalk</string>
<string>mqq</string>
<string>vk</string>
<string>comgooglemaps</string>
</array>
Après de nombreux essais, j'ai trouvé l'une des solutions les plus efficaces:
NSString *facebookID = @"XXXXXXXXXX";
NSString *facebookURL = @"www.facebook.com/XXXXXXXX";
NSURL *urlModal = [NSURL URLWithString:[NSString stringWithFormat:@"fb://facewebmodal/f?href=%@", facebookURL]];
NSURL *urlWithID = [NSURL URLWithString:[NSString stringWithFormat:@"fb://page/%@", facebookID]]; // or "fb://profile/%@" or another type of ID
NSURL *url = [NSURL URLWithString:facebook_url];
if(facebookID && !facebookID.isEmpty && [[UIApplication sharedApplication] canOpenURL:urlWithID]) {
// open facebook app with facebookID
[[UIApplication sharedApplication] openURL:urlWithID];
} else if (facebookURL && !facebookURL.isEmpty && [[UIApplication sharedApplication] canOpenURL:urlModal]) {
// open facebook app with facebookUrl
[[UIApplication sharedApplication] openURL:urlModal];
} else if (![[UIApplication sharedApplication] openURL:url]) {
// somehow open
NSLog(@"%@%@",@"Failed to open url:",[url description]);
}
L'ordre des phrases "if else" varie selon vos goûts ...
Profitez-en!! :-)
Swift 2.3
Pour le code, vous pouvez utiliser cet exemple:
Remarque: Si vous ne trouvez pas l'identifiant de profil facebook, pouvez-vous utiliser le site suivant pour le faire ( https://findmyfbid.com/ )
func goFacebook() {
let profileID = "" //Here put profile id Example:'62260589592'
let facebookURL = NSURL(string: "fb://profile/\(profileID)")!
if UIApplication.sharedApplication().canOpenURL(facebookURL) {
UIApplication.sharedApplication().openURL(facebookURL)
} else {
UIApplication.sharedApplication().openURL(NSURL(string: "https://www.facebook.com/PageName")!)
}
}
Pour Info.plist, vous devez définir les paramètres suivants:
Remarque: pour ouvrir le fichier Info.plist en mode source
-Allez dans le fichier Info.plist et cliquez à droite
-Sélectionnez "Ouvrir en tant que"
-Sélectionnez "Code source"
-Mettre le code ci-dessus d'un autre
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
<string>fbapi</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>fb-messenger-api</string>
</array>