ユーザーをアプリのFacebookページにリダイレクトしたいので、次のコードがあります。
[[UIApplication sharedApplication] openURL:
[NSURL URLWithString: @"https://facebook.com/myAppsPage"]];
デバイスにFacebookアプリがない場合、これは非常に効果的です。次に、Safariでリンクが開きます。
デバイスにFacebookアプリがインストールされている場合、上記のコードを実行するとFacebookアプリが開きますが、アプリのページではなくユーザーのタイムラインが表示されます。リンクを@"fb://pages/myAppsPage"
および@"fb://profile/myAppsPage
に変更しようとしましたが、これによりユーザーのタイムラインが再び開かれました。
だから、私の質問は次のとおりです。Facebookアプリがない場合、またはFacebookアプリがインストールされている場合、サファリでアプリページを開くにはどうすればよいですか。
バニティURLではなく、指定されたページのfacebook IDを使用する必要があります。ページIDを取得するには、次のURLでページのバニティ名を入力し、「id」の値をコピーします。
https://graph.facebook.com/yourappspage
Idを取得したら、canOpenURLメソッドを使用してFBがインストールされているかどうかを確認するメソッドを設定し、両方の状態に適切なコンテンツを提供できます。
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"]];
}
Skladekの答えを見つけてうれしかったので、ここに私の貢献を示します:Swift +その他のソーシャルネットワーク。
Twitterには3つのスラッシュが必要で、FacebookとGoogle+には2つしか必要ないことがわかりました。それ以上の調査はしませんでした…
// 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")!)
}
}
リファクタリングの試み:
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()
}
}
今、あなたは呼び出すことができます:
SocialNetwork.Twitter.openPage()
Facebookの最後の回答以来、ページのスキームが変更されたようです(プロファイルは以前と同じです)
page_id
はURLクエリの一部になりました。そのため、fbアプリにリダイレクトするには、URLの形式を次のようにする必要があります。
fb://page/?id=your_page_numeric_id
また、アプリのfb
スキームをホワイトリストに追加してくださいInfo.plist
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
</array>
さらに変更がある場合、またはFacebookページのpage_id
、Facebook Webページのソースから正確なiOS fb
URLを抽出できます。
al:ios:url
あなたが見つけることができるはずです:
<meta property="al:ios:url" content="fb://page/?id='your_page_numeric_id'">
このURLをアプリにコピーしてから呼び出します:
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)
}
仕事をする必要があります...
IOS 9の場合、Info.plistでLSApplicationQueriesSchemesキーを使用してアプリが呼び出すURLをホワイトリストに登録する必要があります。
こちら を確認してください。
<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>
何度もテストした結果、最も効果的なソリューションの1つが見つかりました。
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]);
}
「他の場合」の文の順序はあなたの好みによって異なります...
楽しめ!! :-)
Swift 2.3
コードの場合、次の例を使用できます。
注:FacebookのプロフィールIDが見つからない場合は、フォローサイトを使用してそれを行うことができます( 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")!)
}
}
Info.plistの場合、次のパラメーターを設定する必要があります。
注:ソースモードでInfo.plistを開くには
-Info.plistファイルに移動し、右クリックします
-「名前を付けて開く」を選択します
-「ソースコード」を選択
-別のコードの上にコードを配置する
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
<string>fbapi</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>fb-messenger-api</string>
</array>