☰
facebook-android-sdk 版本演进全解析:从 CHANGELOG 读懂登录、分享与数据合规的关键变更
2026/10/15 2:56:27 网站建设 项目流程
  • 移动开发
  • 认证鉴权
  • 社交

【免费下载链接】facebook-android-sdk

Used to integrate Android apps with Facebook Platform.

项目地址:https://gitcode.com/gh_mirrors/fa/facebook-android-sdk
点击查看免费下载

本文以仓库根目录的 CHANGELOG.md 为脉络,系统梳理 facebook-android-sdk 从 4.39.0 到 18.3.0 的版本演进史:既涵盖 SSO 单点登录、Integrity 信号保护、Google AdServices 归因等新增能力,也覆盖 Bolts 模块化、AndroidX 迁移、Java 8 兼容等结构性重构,并结合仓库源码逐一印证关键变更的实现细节。读完本文,你将掌握该 SDK 各版本的能力边界、破坏性变更清单以及登录/事件上报两条主线的技术演进逻辑,可直接用于评估升级成本与排查版本相关行为差异。

一、CHANGELOG 格式约定与版本语义

CHANGELOG.md 严格遵循 Keep a Changelog 规范与 SemVer 语义化版本规范:每个版本条目按Added / Changed / Fixed / Removed / Deprecated / Other分类组织,其中### Added与### Fixed出现频率最高,是判断新功能与稳定性修复的主要窗口。文件末尾维护了一份完整的版本对照表,将每个版本号映射到相邻版本的 compare 链接,方便回溯任意两个版本之间的 diff。

从版本节奏可以观察出几条明显规律:

  • 大版本号(X.0.0)通常伴随破坏性变更:例如 13.0.0 移除 tokenless 请求、14.0.0 移除 Open Graph 分享类、15.0.0 迁移 Gradle 脚本,升级前必须仔细阅读对应小节。
  • Graph API 版本同步升级:6.0.0、8.0.0、9.0.0、11.0.0 分别将默认 Graph API 版本提升到 v6.0、v8.0、v9.0、v11.0,其中 8.0.0 明确提示"当前版本使用 Graph API v8.0,如需使用最新版本请在 GraphRequest 调用中显式指定"。
  • 平台政策驱动的合规改动集中在 18.x:AD_ID 权限、Google Privacy Sandbox AdServices 权限、Integrity 保护均在近几个大版本内密集落地。

二、18.x:SSO 登录、安全加固与隐私合规时代

1. 18.3.0:Facebook App 内单点登录(SSO)

18.3.0 是当前 CHANGELOG 中标记为已发布的最新特性版本(更上方仅剩空的[Unreleased]占位),其核心新增是Single Sign-On(SSO)支持:用户可直接通过已安装的 Facebook App 完成登录,无需重新输入凭据。

从源码看,该能力由两个类协同实现,均位于 facebook-common/src/main/java/com/facebook/login/:

  • FBLoginSSOLauncher.kt:负责完整生命周期——通过 AndroidXActivityResultLauncher启动 SSO Activity、解析返回的 bundle extras 生成 token,再委托LoginManager.onActivityResult完成 token 持久化与回调分发。其launch()方法内部先校验当前是否已有 AccessToken(已有则直接返回 false),再检查FeatureManager.Feature.LoginSSO是否被 GateKeeper 开启,随后调用NativeProtocol.createFBLoginSSOIntents构造 Intent 并逐一解析。若所有 Intent 均不可解析,则依据isFb4aInstalled()判定是"未安装 Facebook App"(fb4a_not_installed)还是"App 版本过旧"(fb4a_outdated)。
  • FBLoginSSONoAppDialog.kt:即 CHANGELOG 所述 "Continue with Facebook" 回退对话框。当 Facebook App 缺失或过旧时展示,用户点击继续后通过LoginManager.startLoginWithForceConfirmation回退到标准 Web 登录流程(Chrome Custom Tabs)。注意FBLoginSSOLauncher构造函数的showWithoutFBApp参数(默认 true)控制是否展示该回退对话框。

对应的单元测试 FBLoginSSOLauncherTest.kt 覆盖了启动、结果解析与取消路径,可作为接入该 API 的行为参考。此外LoginManager.kt中还有pendingSsoContext静态字段,用于向后续logIn()调用传递 SSO 上下文。

2. 18.2.3:登录安全参数与一批稳定性修复

18.2.3 是 Added 条目最多的补丁版本,主要新增:

  • redirect_uri 支持:为 WebView、CustomTab 与原生 App(Katana)三种登录处理器提供安全登录重定向。配置入口在 FacebookSdk.kt(getRedirectURI(),从应用清单 meta-data 读取),调用链最终传入WebViewLoginMethodHandler、CustomTabLoginMethodHandler等处理器;相关行为在 WebViewLoginMethodHandlerTest.kt、CustomTabLoginMethodHandlerTest.kt 中有测试覆盖。
  • intent_uri_package_target 参数:支持 CustomTab 与 Katana 登录流程的 Intent 包目标指定,同样由FacebookSdk.getIntentUriPackageTarget()提供。
  • Integrity 的 protected data metadata 标志与 banned params 管理器:用于向 Integrity 上报被禁止的参数名,相关逻辑可追踪至 FeatureManager.kt 中IntelligentIntegrity特性与 IntegrityManager 的映射。
  • Deep Link 请求的 referrer 支持。
  • AdServices API 调用前增加Build.VERSION.SDK_INT检查,避免在旧系统上误调新 API。

Fixed 部分值得注意的包括:FetchedAppGateKeepersManager的ConcurrentModificationException(并在静态初始化阶段规避 Kotlin 反射)、AttributionIdentifiers中AtomicBoolean的误用、ImageDownloader.RequestKey.equals的 identity 比较、FileLruCache内容标签检查逻辑、跨多个类的共享可变字段补上@Volatile、LegacyTokenHelper与Utility的变量遮蔽、CustomRedirectWebDialog的 WebView 尺寸回归,以及 Gaming Graph token 的刷新改为逐个请求执行。

Changed 部分则反映工程实践升级:Gradle 8.5(与 gradle/wrapper/gradle-wrapper.properties 中distributionUrl=gradle-8.5-bin.zip一致)、升级 install-referrer 依赖(gradle/libs.versions.toml 中为2.2)、用RoundingMode.HALF_UP替换废弃的BigDecimal.ROUND_HALF_UP、为安全合规用SecureRandom替换java.util.Random、移除 WebDialog 中的 SSL bypass 代码路径、停止将 Access Token 与事件一同持久化、使用 debug-gated 的logd()替代Log.d()、Kotlin 的.use{}统一管理 I/O 资源等。

3. 18.0.x:Google Privacy Sandbox AdServices 权限

18.0.2 与 18.0.3 为接入 Google Privacy Sandbox AdServices API 新增了四个权限:ACCESS_ADSERVICES_ATTRIBUTION、ACCESS_ADSERVICES_AD_ID、ACCESS_ADSERVICES_CUSTOM_AUDIENCE以及ACCESS_ADSERVICES_TOPICS。这些权限已实际写入 facebook-core/src/main/AndroidManifest.xml,与com.google.android.gms.permission.AD_ID一并声明。CHANGELOG 明确给出两个退出机制:

  • 若需禁用任一 AdServices 权限,请在宿主应用清单中为对应权限添加tools:node="remove"节点标记;
  • AD_ID 权限自 13.0.0 起默认加入,可参照 Google Play 政策说明移除。

18.0.1 修复了潜在的 Ad-Services 命名空间冲突;18.0.2 同步升级了 Kotlin、Gradle 与 Android Gradle Plugin 等一批依赖。18.0.0 则改进了对Google Play Billing Library 5~7的应用内购买事件上报支持(当前版本目录中 billing 依赖为7.0.0)。

三、登录与认证能力的演进主线(12.x → 18.x)

登录模块是 CHANGELOG 中迭代最密集的方向,按时间线可梳理为:

  • 12.0.0/12.0.1:新增基于OpenID Connect 标准的登录能力(当时标记为 beta),并加入AuthenticationToken缓存以增强 OIDC 体验;Login 与 Share kit 全面支持 AndroidX Activity Result API,使用androidx.activityv1.2.0+ 或androidx.fragmentv1.3.0+ 的 context 时无需再覆写onActivityResult()。
  • 12.1.0:修复用户已授权且以openidscope 登录时可能启动多个登录 Intent 的 bug;为原生游戏引入 Tournaments(仅限合作方)。
  • 12.2.0:增加从 FB 界面进入时解析 gaming payload 与 tournament 数据的入口 Intent 解析;为 crash/error 上报增加 data processing options。
  • 12.3.0:存在 client token 时避免 tokenless 请求(为 13.0 移除做铺垫);修复数据访问重授权。
  • 13.2.0:client token 变为强制要求——SDK 初始化会校验 client token,缺失则抛出异常;新增LoginManager.createLogInActivityResultContract()与FacebookDialog.createActivityResultContractForShowingDialog()暴露 Activity Result 契约。前者在 LoginManager.kt 中以内部类FacebookLoginActivityResultContract实现,可配合ActivityResultLauncher使用。
  • 15.2.0:MessengerThreadParams与ShareToMessengerParams转写为 Kotlin,Java 侧不再直接访问实例变量,必须改用 getter(如params.getMetadata()而非params.metadata);同时移除废弃的LoginBehavior.WEB_VIEW_ONLY设置。源码可确认 MessengerThreadParams.kt 目前为 Kotlinclass且字段为val。
  • 14.1.1:修复 AndroidX activity/fragment 1.5.0+ 在未安装 Facebook App 时破坏登录流程的问题。
  • 16.x/17.x/18.x:继续走向 SSO 与更严格的合规(见上文)。

四、隐私、信号处理与 Integrity 保护

从 7.1.0 引入DataProcessingOptions(同时弃用 UserProperties API)、8.2.0 增加"设备端信号处理能力(尚未激活)"起,SDK 的事件上报逐步转向设备端隐私保护:

  • 17.0.0:声明"Integrity 支持更多用例,违反 Meta 政策的 App 将不再被允许发送流量"。源码侧 IntegrityManager.kt 提供了具体实现:processParameters()对事件参数逐个做模型预测(ModelManager.Task.MTML_INTEGRITY_DETECT),命中address/health等类型时移除原参数并将受限参数挪入_onDeviceParams字段;同目录的 VVPManager.kt 负责视频观看保护(VVP)配置解析。
  • 16.0.1:修复AttributionIdentifiers与InstallReferrer的 ANR 问题。
  • 12.2.0 的 Fixed:Android 12 及以上在 GMS 可用且isTrackingLimited关闭时,AppEvents 会上报 attribution ID 与 anonymous ID(受 Google Play 新政时间点控制)。
  • 5.8.0:启动自动高级匹配(Automatic Advanced Matching);5.1.0支持在开发者后台开启后自动记录 Google Play 的 Subscribe 与 StartTrial 事件;5.0.1支持 Audience Network 的 campaign 归因。

五、模块化重构与工程基础升级

1. Bolts 库迁移为独立 kit(13.1.0)

13.1.0 将废弃 Bolts 库的全部类迁移到独立的facebook-boltskit,各 kit 依赖它以保持向后兼容,并计划逐步移除依赖。当前仓库中该 kit 位于 facebook-bolts/src/main/java/com/facebook/bolts/,包含Task、TaskCompletionSource、CancellationToken、CancellationTokenSource、AppLink、BoltsExecutors等 15 个 Kotlin 文件,测试位于 facebook-bolts/src/test/kotlin/com/facebook/bolts/。

12.0.0 还进一步收紧了 Bolts API:com.facebook.bolts.AppLinkResolver只接收非空参数并返回非空值,并移除了com.facebook.bolts.Capture。

2. AndroidX 与 Java 8(7.0.0 / 13.0.0)

7.0.0 完成AndroidX 迁移(旧 support 库用户需升级后使用 v7+);13.0.0 将 Java source/target 兼容性设为Java 8,并要求接入方也将 source/target 设为 1.8 及以上。

3. Gradle 工程现代化(15.0.0 / 18.2.3)

15.0.0 将除maven.gradle与 sample 项目外的 Gradle 脚本从 Groovy 迁移为 Kotlin DSL,同时在 debug 构建上启用 jacoco 收集覆盖率(从源码构建而非 Maven 发布版本时,可能遇到 debug 构建启动崩溃,官方文档给出了解决方案);18.2.3 将 Gradle 升级到 8.5。仓库中 settings.gradle.kts 与 jacoco.gradle.kts 即是这一演进的落地证据。

4. 版本目录统一管理依赖

gradle/libs.versions.toml 采用 Gradle Version Catalog 集中管理:minSdk = 15、compileSdk/targetSdk = 34、kotlin = 1.8.20、billing7.0.0、installreferrer2.2等,与 CHANGELOG 中历次依赖升级条目一一对应。

六、破坏性变更与移除项盘点

升级时需重点留意的 Breaking Changes(均以当前仓库状态验证):

  • 13.0.0:移除tokenless 请求支持——所有 Graph API 请求必须关联 access token,未登录用户需通过 client token 构造 token;移除废弃的LikeView及关联类(LikeButton、LikeContent、LikeDialog)、废弃的 Device Sharing 类、废弃的 Messenger Sharing 内容类、Fblite Login、PerformanceGuardian 与端到端 dumpsys 测试工具。
  • 14.0.0:移除废弃的ShareOpenGraphAction、ShareOpenGraphContent、ShareOpenGraphValueContainer、ShareOpenGraphObject(当前源码中已不存在这些类,Open Graph 故事仅以链接分享形式呈现)。
  • 15.2.0:移除LoginBehavior.WEB_VIEW_ONLY;Messenger 参数类字段改由 getter 访问。
  • 11.0.0:AccessToken的token、applicationId、userId、permissions变为非空;GraphResponse构造函数要求非空GraphRequest;移除废弃的签名 key hash 校验。
  • 13.2.0 起:client token 强制必填。
  • 12.0.0:移除com.facebook.bolts.Capture与AppEventsLogger中一批废弃函数、ViewIndexer.sendToServerUnity(String)。

值得注意的例外是11.0.0 的版本跳跃:CHANGELOG 从 11.3.0 直接跳回 9.1.1(无 10.x 条目),这是版本线规划所致,不影响使用。

七、性能、稳定性与运行时兼容性修复

历次版本中大量 Fixed 条目围绕运行时健壮性,代表性修复包括:

  • ANR 治理:16.2.0 弃用ExecutorService.scheduleAtFixedRate,改用scheduleWithFixedDelay(已在 ANRDetector.kt 的源码中确认);11.1.0 引入 ANR 检测器(仅收集由 Facebook SDK 引发的 ANR,可通过关闭自动记录事件禁用);16.0.1 修复归因标识与 install referrer 的 ANR。
  • Android 版本兼容:8.1.0 针对 Android 11 包可见性变化做登录切换缓解;11.1.1 修复 Android 11 上从非视觉 context 访问 WindowManager 的 bug;11.1.0/11.1.1 支持 Android S+ 的包校验和 API;15.0.1 修复 target Android 12+ 时组件缺android:exported导致的崩溃;12.2.0 修复 Android 12+ 的归因上报策略。
  • 并发与内存:5.5.2 修复 Codeless 内存泄漏;11.1.1 修复云端游戏的竞态条件;18.2.3 一批线程安全修复(@Volatile、AtomicBoolean、ConcurrentModificationException)。
  • WebView 可用性:13.1.0 修复 WebView 不可用时的崩溃。

八、如何基于 CHANGELOG 制定升级策略

结合本仓库结构与 CHANGELOG,建议按以下流程评估升级:

  1. 先读版本间隔:利用 CHANGELOG 末尾的版本对照表(如18.2.3 → 18.3.0)确认要跨越的版本区间,逐条比对 Added/Removed/Deprecated。
  2. 核对 manifest 与依赖:关注 AdServices 权限(是否需要tools:node="remove")、AD_ID 权限、client token 配置,参考 facebook-core/src/main/AndroidManifest.xml 与 gradle/libs.versions.toml。
  3. 关注登录 API 变化:检查是否使用onActivityResult旧流程(13.x 起推荐 AndroidX Activity Result 契约)、是否使用 OIDC/AuthenticationToken、是否受 SSO 新流程影响,相关行为可对照 login 模块测试。
  4. 回归事件上报链路:Integrity 过滤、VVP、自动事件等均影响 AppEvents,可结合 facebook-core/src/test/kotlin/com/facebook/appevents/ 下的测试理解预期行为。
  5. 保留 debug 构建注意点:若从源码构建,15.0.0 起 jacoco 覆盖可能导致 debug 构建启动问题,需按官方 issue 说明处理。

总而言之,CHANGELOG.md 完整呈现了 facebook-android-sdk 从早期 Graph API 调用库演进为模块化、合规化现代 SDK 的全过程;将其与仓库源码(登录模块、Integrity 模块、manifest 权限声明、Gradle 版本目录)对照阅读,是准确评估版本行为、制定升级与排查方案最可靠的路径。

  • 移动开发
  • 认证鉴权
  • 社交

【免费下载链接】facebook-android-sdk

Used to integrate Android apps with Facebook Platform.

项目地址:https://gitcode.com/gh_mirrors/fa/facebook-android-sdk
点击查看免费下载

相关推荐

上一篇:libiec61850:电力自动化通信协议栈的技术架构与实践应用
下一篇:5分钟跑通抖音无水印下载:单条、主页批量采集与直播录制全流程

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询