Swift 5点击按钮打开Facebook应用页面失败问题求助
如何在iOS中通过按钮打开Facebook应用的指定商家页面?
我来帮你解决这个跳转Facebook商家页面的问题——结合你的开发环境(Xcode 10.2.1、iOS 12.2、Swift 5),我整理了经过验证的正确实现步骤,帮你避开之前踩过的坑:
核心思路
Facebook的应用内跳转Scheme已经不再支持用户名(screen_name)参数,必须使用商家的唯一数字ID配合fb://profile/[数字ID]格式的URL,同时正确配置Info.plist以获得系统的跳转权限。
步骤1:获取商家的数字Facebook ID
你需要先获取目标商家页面的数字ID(不能用页面的用户名):
- 可以通过Facebook开发者工具或者第三方工具查询商家页面的数字ID,确保拿到的是一串纯数字的ID。
步骤2:配置Info.plist(关键!解决-canOpenURL错误)
iOS 9及以后,应用必须声明要查询的URL Scheme,否则会出现你遇到的"This app is not allowed to query for scheme facebook"错误。
- 打开项目的
Info.plist文件,右键选择"Open As -> Source Code" - 添加以下代码到文件中:
<key>LSApplicationQueriesSchemes</key> <array> <string>fb</string> <string>fb-messenger</string> <!-- 如果需要跳转Messenger可以保留,否则可删除 --> </array>
或者在可视化界面中操作:
- 添加"LSApplicationQueriesSchemes"类型为Array
- 给数组添加String元素:
fb(必填)和fb-messenger(可选)
步骤3:编写Swift跳转代码
在按钮的点击事件中,实现“优先打开Facebook应用,失败则跳转Safari网页”的逻辑:
@IBAction func openFacebookPage(_ sender: UIButton) { // 替换成你获取到的商家数字ID let facebookPageID = "1234567890" // Facebook应用内跳转URL guard let appURL = URL(string: "fb://profile/\(facebookPageID)") else { return } // Safari网页 fallback URL guard let webURL = URL(string: "https://www.facebook.com/pages/\(facebookPageID)") else { return } let application = UIApplication.shared if application.canOpenURL(appURL) { // 打开Facebook应用 application.open(appURL, options: [:], completionHandler: nil) } else { // 跳转Safari网页 application.open(webURL, options: [:], completionHandler: nil) } }
常见问题排查
- 为什么
facebook://开头的URL不行?
Facebook已经弃用了facebook://这个Scheme,现在官方推荐使用fb://开头的Scheme进行应用内跳转。 - 为什么
fb://user?screen_name=xxx打开的是个人动态页?
这个Scheme的参数格式已经失效,Facebook现在只支持通过数字ID的fb://profile/[ID]格式直接跳转商家/个人页面。 - 还是出现
-canOpenURL错误?
检查Info.plist中是否正确添加了LSApplicationQueriesSchemes数组,并且包含fb这个元素——iOS系统会拦截未声明的Scheme查询请求。
内容的提问来源于stack exchange,提问作者futureappguru
相关产品推荐
相关产品推荐

