Android 上的 Facebook 深度链接

2024-05-13

我正在尝试在我的应用程序上实现 Facebook 的深度链接功能,并遇到了以下情况:

我有一个名为 MainActivity 的活动,其声明如下:

    <activity
        android:name="com.mypackage.android.MainActivity">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

此活动 + 我的包名称也在 Facebook 开发者网站上我的应用程序设置中声明。

一旦 Facebook 应用程序上的链接被点击,我就应该通过 Activity 的 onCreate 方法处理此事件。 以下代码处理该事件:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Uri target = getIntent().getData();

        if (target != null){
          // got here via Facebook deep link
          // once I'm done parsing the URI and deciding
          // which part of my app I should point the client to
          // I fire an intent for a new activity and
          // call finish() the current activity (MainActivity)
        }else{
          // activity was created in a normal fashion
        }
    }

一切都按计划进行,除了以下情况:

  1. 用户启动了我的应用程序
  2. 主活动已创建
  3. 次要活动已创建
  4. 主要活动完成
  5. 应用程序通过设备主页按钮进入后台
  6. Facebook 应用程序上的深层链接被点击

在这种情况下,我的应用程序再次进入前台,但 MainActivity 的 onCreate / onNewIntent 不要被调用,而是 SecondActivity 的 onResume() 被调用并恢复到它的状态 最后的状态。

注意:我已经在运行 Android 4.2.1 的 Samsung Nexus 上测试了此问题并得到了此结果,但在运行 Android 2.3.5 的 Galaxy S1 上测试时,它的工作原理与我最初的预期相同。

任何帮助将不胜感激, 谢谢。


Facebook 通过显式启动您的“MainActivity”(您在开发者页面中提供的)来从他们自己的应用程序启动您的应用程序。

Android 的默认行为是:如果应用程序已经运行,则再次调用startActivity()不会从头开始新任务,但是只将已经运行的任务恢复到前台。

但好消息是,您可以通过将以下内容添加到 MainActivity 来更改此默认行为android:launchMode="singleTask"。它的定义是:

系统创建一个新任务并在新任务的根实例化活动。但是,如果单独任务中已存在该活动的实例,系统将通过调用其 onNewIntent() 方法将 Intent 路由到现有实例,而不是创建新实例。一次只能存在一个活动实例。

从这一点开始,您始终可以响应起始意图,并且从那时起,您始终可以通过使用两个标志重新启动活动来导航回已经在后台的任务(如果存在)Intent.FLAG_ACTIVITY_SINGLE_TOP&&Intent.FLAG_ACTIVITY_CLEAR_TOP组合

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 上的 Facebook 深度链接 的相关文章

随机推荐

  • 计算 R 中数据帧的每一行中特定值的连续出现次数

    我有一个data frame许多位置 这么多行 的变量的每月值 我想计算值为零的连续月份 即连续单元格 的数量 如果只是从左到右阅读 这很容易 但增加的复杂性是年底与年初是连续的 例如 在下面的缩短示例数据集中 用季节而不是月份 位置 1
  • 字母数字验证在 jquery 中不起作用

    我的代码如下 包含所有必需的js文件 当我提交表单而不为 UserDetailAliasName 提供任何值时 表单不会提交并显示验证错误消息 此字段是必需的 但是如果我提交像 等值 表单会提交数据 我使用此表单从数据库搜索用户名 docu
  • AWS SQS Batch SendMessageBatchRequest 非常慢

    我的应用程序使用 SendMessageBatchRequest 将每个请求发布 10 条消息到 AWS SQS 每条消息的大小小于250字节 该应用程序预计每天发布约一百万条记录 但要实现这一目标 消息发布的速度非常慢 AmazonSQS
  • 使用 MinGW 链接到 Python

    我不想创建一个嵌入Python解释器的跨平台程序 并用MinGW编译它 但是 Python 二进制发行版没有提供 MinGW 链接的库 仅python32 lib对于 Visual C 并且 Python 源包不提供使用 MinGW 编译的
  • 遵循排毒模拟实施但不起作用

    我正在关注 Detox 文档通过排毒提前嘲笑 https github com wix Detox blob master docs Guide Mocking md 我这样做是因为我想模拟我的 api js 文件 该文件默认从后端服务器获
  • 在抛出异常之前重试某件事 3 次 - 在 clojure 中

    我不知道如何在Clojure中实现这段Python代码 for i in range 3 try except e if i 2 raise e else continue else break 我想知道为什么在 Python 中如此简单的
  • 在 PHP 中创建关联数组

    我有一个多维数组 shop array array appn1 pub1 pub2 pub3 array appn2 pub1 array appn3 pub1 pub2 每个数组中的第一项是申请编号每个数组中的其余部分是出版号 我得到每个
  • 小视频播放

    根据我从互联网收集的信息 MPMoviePlayerController 类不支持小视频播放 因此 为了死马当活马医 我想知道可以使用什么样的方法来让小视频在屏幕的一角播放 而不中断屏幕的其余部分 到目前为止 我们已经遇到了两种可行的解决方
  • 让 WIX 在项目中包含引用

    我对 WiX 和设置自定义安装程序完全陌生 所以我对问题的主题表示歉意 我有一个内部业务应用程序 日记 它构建并运行良好 因此我按照教程 官方文档添加 WiX 项目并引用日记的 csproj 然后构建并运行这个最基本版本的 WiX 安装程序
  • 在进行堆转储后,如何在发生 OutOfMemoryError 时重新启动 JVM?

    我知道关于 XX HeapDumpOnOutOfMemoryError https stackoverflow com q 542979 260805JVM 参数 我也知道 XX OnOutOfMemoryError cmd args cm
  • 如何计算 COUNTIF 但仅计算唯一值?

    我有一个数据集 其中有一列包含参考文献 参考文献始终遵循相同的格式 1 XXX YYY XXX 始终为 3 个字母 YYY 始终是一个数字 每个XXX都会有YYY 001 如果同一个XXX有多个类型 就会有YYY 002 以此类推 我想知道
  • Java 中的连接路径

    In Python我可以连接两条路径os path join os path join foo bar gt foo bar 我正在尝试在 Java 中实现相同的目标 而不用担心是否OS is Unix Solaris or Windows
  • 解包可选值时意外发现 nil - 使用 ALAMOFIRE

    我正在尝试使用 Alamofire 获取 JSON 格式的数据 当我使用一个 URL 时 它工作正常 当我使用另一个 URL 时 我在解包可选值时收到错误 我似乎无法追踪错误来自哪里 我已采取将代码放入 ViewDidLoad 来跟踪错误
  • 发布者-订阅者与观察者[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ACR122 - 卡模拟

    如何让 NFC 非接触式读卡器 ACR122U 充当标签 卡模拟模式 招股说明书声称该设备可以进行卡模拟 但 SDK 似乎没有提供此功能的示例或文档 有人知道怎么做这个吗 是否需要额外的软件 请注意 我的目标平台是 MS Windows 提
  • 使用 Lodash 循环 JavaScript 对象中的属性

    是否可以循环访问 JavaScript 对象中的属性 例如 我有一个 JavaScript 对象定义如下 myObject options property1 value 1 property2 value 2 属性将动态添加到该对象 有没
  • 如何在 ngrx/effects 中执行 if/else 操作?

    我正在使用 ngrx effects 我想根据以下情况分派不同的操作foo商店里的状态 这就是我现在正在做的 Effect foo1 this updates whenAction Actions FOO filter obj gt obj
  • Boost async_write问题

    我将展示一些代码 void wh const boost system error code ec std size t bytes transferred std cout lt lt test int main int argc cha
  • 获取 pandas 中最后一次出现特定值之后的所有行

    我的数据框看起来像 ID colA 1 B 1 D 2 B 2 D 2 C 我已返回每组中事件 B 最后一次出现后的所有行 输出将是 ID colA 1 D 2 D 2 C 我试过 a df colA str contains B grou
  • Android 上的 Facebook 深度链接

    我正在尝试在我的应用程序上实现 Facebook 的深度链接功能 并遇到了以下情况 我有一个名为 MainActivity 的活动 其声明如下