You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Xamarin.Forms中唤起Facebook应用打开指定搜索链接

Xamarin.Forms 跨平台打开Facebook搜索链接实现方案

整体实现逻辑基于Xamarin.Forms依赖服务完成双端适配,优先拉起已安装的Facebook主应用/Facebook Lite应用,未检测到对应应用时自动跳转默认浏览器打开目标页面。

共享层接口定义

在共享项目中定义跨平台调用的服务接口,后续通过DependencyService完成双端具体实现的调用:

public interface IFacebookLaunchService
{
    /// <summary>
    /// 打开Facebook用户搜索页
    /// </summary>
    /// <param name="searchName">要搜索的用户名称</param>
    Task OpenPeopleSearchPage(string searchName);
}

Android端实现

  • 核心逻辑:依次检测设备是否安装Facebook主应用(包名com.facebook.katana)、Facebook Lite应用(包名com.facebook.lite),存在对应应用时通过Facebook私有Schemefb://search/people/?q={搜索词}拉起应用内搜索页,均未安装时通过系统默认浏览器打开移动端网页链接。
  • 具体实现代码:
[assembly: Dependency(typeof(FacebookLaunchDroidService))]
namespace YourApp.Droid.Services
{
    public class FacebookLaunchDroidService : IFacebookLaunchService
    {
        private const string FbMainPackage = "com.facebook.katana";
        private const string FbLitePackage = "com.facebook.lite";
        
        public Task OpenPeopleSearchPage(string searchName)
        {
            var encodedName = Uri.EscapeDataString(searchName);
            var webTarget = $"https://m.facebook.com/search/people/?q={encodedName}";
            var appTarget = $"fb://search/people/?q={encodedName}";
            
            var appIntent = new Intent(Intent.ActionView, Android.Net.Uri.Parse(appTarget));
            appIntent.AddFlags(ActivityFlags.NewTask);
            
            // 优先拉起主应用
            if (CheckAppInstalled(FbMainPackage))
            {
                appIntent.SetPackage(FbMainPackage);
                Application.Context.StartActivity(appIntent);
                return Task.CompletedTask;
            }
            // 次选拉起Lite版
            if (CheckAppInstalled(FbLitePackage))
            {
                appIntent.SetPackage(FbLitePackage);
                Application.Context.StartActivity(appIntent);
                return Task.CompletedTask;
            }
            //  fallback到默认浏览器
            var browserIntent = new Intent(Intent.ActionView, Android.Net.Uri.Parse(webTarget));
            browserIntent.AddFlags(ActivityFlags.NewTask);
            Application.Context.StartActivity(browserIntent);
            return Task.CompletedTask;
        }

        private bool CheckAppInstalled(string packageName)
        {
            try
            {
                Application.Context.PackageManager.GetPackageInfo(packageName, PackageInfoFlags.Activities);
                return true;
            }
            catch
            {
                return false;
            }
        }
    }
}
  • 配置要求:Android 11及以上版本需要在AndroidManifest.xml中添加包可见性查询声明,否则无法正常检测应用安装状态:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
    <!-- 其他原有配置 -->
    <queries>
        <package android:name="com.facebook.katana" />
        <package android:name="com.facebook.lite" />
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="https" />
        </intent>
    </queries>
</manifest>

iOS端实现

  • 核心逻辑:检测设备是否可通过Facebook的URL Schemefb://拉起应用,可拉起则直接跳转到应用内搜索页,否则调用Safari打开网页链接。iOS端App Store无公开上线的Facebook Lite正式版本,无需额外适配Lite版。
  • 前置配置:需要在Info.plist中添加Scheme白名单,否则iOS 9及以上版本无法检测Facebook应用安装状态:
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fb</string>
</array>
  • 具体实现代码:
[assembly: Dependency(typeof(FacebookLaunchIosService))]
namespace YourApp.iOS.Services
{
    public class FacebookLaunchIosService : IFacebookLaunchService
    {
        public Task OpenPeopleSearchPage(string searchName)
        {
            var encodedName = Uri.EscapeDataString(searchName);
            var webTarget = new NSUrl($"https://m.facebook.com/search/people/?q={encodedName}");
            var appTarget = new NSUrl($"fb://search/people/?q={encodedName}");
            
            if (UIApplication.SharedApplication.CanOpenUrl(appTarget))
            {
                UIApplication.SharedApplication.OpenUrl(appTarget);
            }
            else
            {
                UIApplication.SharedApplication.OpenUrl(webTarget);
            }
            return Task.CompletedTask;
        }
    }
}

共享层调用示例

在Xamarin.Forms页面/ViewModel中直接通过依赖服务调用即可:

await DependencyService.Get<IFacebookLaunchService>().OpenPeopleSearchPage("要搜索的用户名");

内容的提问来源于stack exchange,提问作者Costas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 20:36:33