CLAUDE.md 3.9 KB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

模块概述

frame/share 是 wenext-android-frame 框架中的第三方分享与社交平台封装模块,提供统一的分享接口和动态链接生成功能。

核心架构

主要接口

  • IShareManager: 分享管理器核心接口,提供所有分享功能
  • IShareConfig: 分享配置接口,定义动态链接域名和应用信息
  • IShareCallback: 分享结果回调接口
  • IGetDynamicLinkCallback: 动态链接获取结果回调接口

核心实现

  • ShareManager: 分享管理器单例实现,支持多渠道分享和动态链接生成
  • shareManager: 全局单例实例,通过 initShareManager(config) 初始化

分享渠道架构

采用策略模式实现多渠道分享:

  • IShareChannel: 分享渠道抽象接口
  • FacebookShareChannel: Facebook 分享实现(使用 Facebook SDK)
  • IntentShareChannel: 系统 Intent 分享实现(WhatsApp、VK、系统分享等)

支持的分享渠道

  • ShareChannel.FB: Facebook
  • ShareChannel.WHATSAPP: WhatsApp
  • ShareChannel.VK: VKontakte
  • ShareChannel.SYSTEM: 系统分享

动态链接实现

支持两种动态链接生成方式:

  1. Firebase Dynamic Links: 默认方式,支持社交元数据和跨平台参数
  2. AppsFlyer OneLink: 可选方式,用于归因跟踪

核心功能

分享功能

// 分享链接
shareManager.shareLink(activity, ShareChannel.FB, link, callback)

// 分享图文(网络图片)
shareManager.shareImageText(activity, ShareChannel.WHATSAPP, imageUrl, text, callback)

// 分享本地图文
shareManager.shareLocalImageText(activity, ShareChannel.SYSTEM, localPath, text, callback)

动态链接生成

// 协程方式
val result = shareManager.generalShareLink(
    activity, source, deeplink, metaTitle, metaDesc, metaImageUrl
)

// 异步回调方式
shareManager.generalShareLinkAsync(
    activity, source, deeplink, metaTitle, metaDesc, metaImageUrl, 
    callback = { link -> /* 处理结果 */ }
)

动态链接处理

// 处理从外部打开应用的动态链接
shareManager.handleDynamicLinkIntent(intent) { uri ->
    // 处理深度链接
}

依赖集成

核心依赖

  • Facebook SDK (libs.facebook.share): Facebook 分享功能
  • Firebase Dynamic Links (libs.firebase.dynamic.link): 动态链接生成
  • AppsFlyer SDK (libs.appsflyer): 可选的 OneLink 分享
  • Google Play Feature Delivery (libs.play.feature.delivery): 应用包管理

frame 模块依赖

  • frame:base: RLT 状态管理和基础框架
  • frame:coroutine: 协程工具封装
  • frame:log: 日志框架
  • frame:util: 工具类(AppUtil、PackageUtil)

使用模式

初始化

// 实现配置接口
class MyShareConfig : IShareConfig {
    override val httpDeepLinkHost = "your-domain.com"
    override val iOSPackageName = "com.yourapp.ios"
    override val iOSAppStoreId = "your-app-store-id"
    
    override fun getDynamicLinkPrefix(type: DynamicLinkType): String {
        return when(type) {
            DynamicLinkType.NORMAL -> "https://yourapp.page.link"
            DynamicLinkType.INVITE -> "https://invite.yourapp.page.link"
        }
    }
}

// 初始化分享管理器
initShareManager(MyShareConfig())

Activity 结果处理

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    shareManager.onActivityResult(requestCode, resultCode, data)
}

开发注意事项

  1. 权限检查: 模块会自动检查目标应用是否安装,未安装时回调失败状态
  2. 生命周期绑定: Firebase 动态链接生成会与 Activity 生命周期绑定
  3. 超时处理: 动态链接生成有超时机制(Firebase 5秒,AppsFlyer 15秒)
  4. 错误处理: 使用 frame:base 的 Rlt 类型进行统一的结果处理