Swift 通过 FacebookUID 打开 Facebook 个人资料

Swift Open Facebook Profile by FacebookUID

我正在尝试使用他们的 Facebook UID 在 Swift 中打开用户的 Facebook 个人资料。在模拟器中,它可以运行并打开配置文件的网络版本并且运行良好,但是在我的实际设备上,它打开了 Facebook 本机应用程序并给我一个 "Page not Found" 错误。

guard let facebookUID = self.user?.facebookUID else {
    return
}

print(facebookUID)
let fbURLWeb: NSURL = NSURL(string: "https://www.facebook.com/\(facebookUID)")!
let fbURLID: NSURL = NSURL(string: "fb://profile/\(facebookUID)")!

if(UIApplication.sharedApplication().canOpenURL(fbURLID)){
    // FB installed
    UIApplication.sharedApplication().openURL(fbURLID)
} else {
    // FB is not installed, open in safari
    UIApplication.sharedApplication().openURL(fbURLWeb)
}

我做错了什么?

提前致谢!

编辑

我注意到,如果用户删除或未在其 phone 上安装 Facebook 应用程序,它将通过 Safari 正确打开配置文件,这就是它在模拟器上运行的原因,但没有在我的设备上。但是,我还注意到,如果我尝试 public 个人资料,如 fb://profile/4(这是马克扎克伯格的个人资料),我可以让它在 Facebook 应用程序中工作。

您好,基于 documentation Facebook ID 是应用范围内的用户 ID,因此您可以像

fb://profile?app_scoped_user_id=%@

但还要检查有关 https://developers.facebook.com/bugs/332195860270199 使用

打开 Facebook 个人资料的错误报告

fb://profile?app_scoped_user_id=%@

不支持。

因此您必须在 Safari 中打开 Facebook 个人资料,或者您可以在应用程序 webview 中使用打开用户个人资料。 我已经检查了一些 facebook id 10000****889,10000***041 等。所有人都在 facebook 中打开了个人资料 app.Yes 有些人发现了相同的 error.Page 机器人。

可能有隐私设置->你想要 link 之外的搜索引擎到你的个人资料吗->否。限制搜索。

从 facebook 获取用户 ID 技巧:

1)右键单击人物或页面的个人资料照片,select 属性和 ID 将包含在页面中

2) 在移动浏览器中,如果你打开照片,就会有 id 例如 " fbid = *** & pid = 1000....89 " 所以 1000....89 将是您的用户 ID

这是另一个适用于 iOS 10Swift 3 的解决方案。

首先,您应该将 LSApplicationQueriesSchemes 键添加到 Info.plist 文件。如果不添加此键,canOpenURL 将始终 return false。比您需要添加要检查的方案。对 Facebook 使用 fb

它应该是这样的:

剩下的是Swift:

if UIApplication.shared.canOpenURL(URL(string: "fb://profile/PROFILE_ID")!) {
    UIApplication.shared.open(URL(string: "fb://profile/PROFILE_ID")!, options: [:])
} else {
    UIApplication.shared.open(URL(string: "https://facebook.com/PROFILE_ID")!, options: [:])
}

注意:将 PROFILE_ID 替换为您的目标。

感谢 vien vu。 从 iOS 9 < 上面,您必须将 url 列入白名单,您的应用程序将使用 Info.plist 中的 LSApplicationQueriesSchemes 键调用它们。所以将此代码添加到您的 plist 文件中:

 <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>

Swift 2.3

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")!)
    }
}

注意:如果您找不到 facebook 个人资料 ID,您可以使用以下网站进行查找 (https://findmyfbid.com/)

设置在info.plist

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>fb</string>
 <string>fbapi</string>
 <string>fbauth2</string>
 <string>fbshareextension</string>
 <string>fb-messenger-api</string>
</array>

截至 2020 年 8 月 30 日,我能够使用此 URL 方案 fb://profile?id={userid/username/pageid} 打开 Facebook 用户的个人资料/页面。

例如:fb://profile?id=4fb://profile?id=zuck

警告:请自行承担使用风险,因为这在 Facebook 开发人员文档中没有记录。此 URL 计划将来可能会在没有任何警告和指示的情况下被 Facebook 应用程序删除。