从iOS应用程序打开Facebook页面链接

med*_*ick 67 facebook ios

我想将用户重定向到我的App的Facebook页面,所以我有以下代码:

[[UIApplication sharedApplication] openURL:
    [NSURL URLWithString: @"https://facebook.com/myAppsPage"]];
Run Code Online (Sandbox Code Playgroud)

如果设备上没有Facebook应用程序,这非常有用.然后在Safari中打开链接.

如果在设备上安装了Facebook应用程序,那么在执行上面的代码后Facebook应用程序打开,但它显示的是用户时间线,而不是我的应用页面.我试图更改链接到@"fb://pages/myAppsPage"@"fb://profile/myAppsPage,但这再次打开用户时间轴.

所以,我的问题是:如果没有Facebook应用程序,我如何在safari中打开我的应用程序页面,如果安装了这个应用程序,我怎么能在Facebook应用程序中打开我的应用页面.

Sea*_*dek 123

您必须使用给定页面的Facebook ID而不是虚荣URL.要获取页面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"]];
}
Run Code Online (Sandbox Code Playgroud)

  • 随着Facebook弃用ID,这不再起作用. (7认同)
  • 在iOS 9中,记得通过在Info.plist中添加数组键"LSApplicationQueriesSchemes"并将项目"fb"添加为数组中的字符串项来将该方案列入白名单. (4认同)
  • 感谢使用`fb:// profile/xxxxx`这个在当前版本的Facebook应用程序中运行良好的精彩提示.一直在互联网上搜索一个解决方案,建议使用`fb:// page/xxxxx`,这不会**工作,没有页面加载,可能是旧版本的Facebook应用程序. (3认同)

amb*_*ght 32

似乎自从Facebook的最后一个答案改变了页面方案(配置文件与之前相同)

page_id现在是URL查询的一部分.因此,为了重定向到fb app,网址必须采用以下格式:

fb://page/?id=your_page_numeric_id
Run Code Online (Sandbox Code Playgroud)

还要确保fb应用中的白名单方案Info.plist

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fb</string>
</array>
Run Code Online (Sandbox Code Playgroud)

如果有任何进一步的修改或您不知道您的Facebook页面page_id,您可以fb从您的Facebook网页源提取精确的iOS URL.

  1. 在Safari中打开您的Facebook页面
  2. 右键单击 - >检查元素
  3. 搜索 al:ios:url

你应该能够找到:

<meta property="al:ios:url" content="fb://page/?id='your_page_numeric_id'">
Run Code Online (Sandbox Code Playgroud)

将此网址复制到您的应用中,然后致电:

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)
}
Run Code Online (Sandbox Code Playgroud)

应该做的工作.


Nyc*_*cen 30

我很高兴找到skladek的答案,所以这是我的贡献:Swift +其他社交网络.

我发现我需要3个正斜杠用于推特,只有2个用于Facebook和Google+,我没有调查超过那个......

// 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")!)
    }
}
Run Code Online (Sandbox Code Playgroud)

尝试重构:

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()
    }
}
Run Code Online (Sandbox Code Playgroud)

现在你可以打电话:

SocialNetwork.Twitter.openPage()
Run Code Online (Sandbox Code Playgroud)


小智 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>
Run Code Online (Sandbox Code Playgroud)