68

ユーザーをアプリの Facebook ページにリダイレクトしたいので、次のコードを用意します。

[[UIApplication sharedApplication] openURL:
    [NSURL URLWithString: @"https://facebook.com/myAppsPage"]];

デバイスに Facebook アプリがない場合、これはうまく機能します。次に、リンクが Safari で開きます。

デバイスに Facebook アプリがインストールされている場合、上記のコードを実行すると Facebook アプリが開きますが、アプリのページではなくユーザーのタイムラインが表示されます。リンクを と に変更しようとしましたが、ユーザーのタイムラインが再び開いて@"fb://pages/myAppsPage"しまいました。@"fb://profile/myAppsPage

だから、私の質問は次のとおりです。Facebookアプリがない場合、またはFacebookアプリがインストールされている場合、Safariでアプリページを開くにはどうすればよいですか。

4

8 に答える 8

30

skladek の回答を見つけてうれしかったので、ここに私の貢献があります: Swift + 他のソーシャル ネットワーク。

Twitter では 3 つのスラッシュが必要で、Facebook と Google+ では 2 つだけ必要であることがわかりました。それ以上は調査しませんでした…</p>

// Go to https://graph.facebook.com/PageName to get your page id
func openFacebookPage() {
    let facebookURL = NSURL(string: "fb://profile?id=PageName")!
    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()
于 2015-02-12T17:58:50.517 に答える
11

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>
于 2015-12-01T22:29:28.617 に答える
1

スイフト 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>
于 2018-03-01T21:48:58.470 に答える