繁体   English   中英

无法获得 iOS 应用程序链接以使用 firebase 动态短链接

[英]Can't get iOS app linking to work with firebase dynamic short links

我正在开发一个 Flutter 应用程序,它显示来自 firebase 数据库的内容,并使用 firebase 动态链接和深度链接让用户共享内容。 我使用的是短动态链接,因为它们对用户更友好,我按照官方 flutter教程示例来实现深度链接。 唯一的区别是 iOS 我正在使用深度链接和应用程序链接(以便能够使用 https url)。

现在,为了解释我的问题,假设我有一个 ID 为123456的 object,它显示在名为page1的页面上。 我使用以下代码生成了一个简短的动态(唯一不同的是域):


await FirebaseDynamicLinks.instance.buildShortLink(
        DynamicLinkParameters(
          link: Uri.parse('https://mydomain.app/page1/123456'),
          uriPrefix: 'https://test.mydomain.app/post',
          googleAnalyticsParameters: GoogleAnalyticsParameters(
            campaign: 'test_share',
            content: 123456
          ),
          androidParameters: AndroidParameters(
            packageName: 'es.mydomain.app',
            fallbackUrl: Uri.parse('https://mydomain.app/get/')
          ),
          iosParameters: IOSParameters(
              bundleId: 'es.mydomain.app',
              fallbackUrl: Uri.parse('https://mydomain.app/get/')
          )
        )
    );

现在,创建了一个类似https://test.mydomain.app/page1/ADS的链接,其中不包含整个 ID。 在这里,主要问题是,在 Android 上一切正常,因为链接在设备的默认浏览器上解析,然后打开应用程序并使用正确的 object id 打开 page1。 但是在iOs上打开app,收到的路由是/page1/ABC,所以虽然打开了page1,但是收到的id不对,无法显示object。 在它工作的 Android 上,深层链接在清单上指定如下:

<meta-data android:name="flutter_deeplinking_enabled" android:value="true" />
<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="http" android:host="test.mydomain.app" />
    <data android:scheme="https" />
</intent-filter>

iOS上,通过在Info.plist中添加如下代码实现app对接

<key>FlutterDeepLinkingEnabled</key>
<true/>
<key>CFBundleURLTypes</key>
<array>
    <dict>
    <key>CFBundleTypeRole</key>
    <string>Editor</string>
    <key>CFBundleURLName</key>
    <string>test.mydomain.app</string>
    <key>CFBundleURLSchemes</key>
    <array>
    <string>https</string>
    </array>
    </dict>
</array>

并通过创建一个新的权利(使用 xcode)产生文件 Runner.entitlements

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.developer.associated-domains</key>
    <array>
        <string>applinks:tes.mydomain.app</string>
    </array>
</dict>
</plist>

我试过在调用导航器时检查FirebaseDynamicLinks.instance.getInitialLink() ,但它始终是 null。

据我所知,这应该有效,但显然无效。 有人知道会发生什么吗? 欢迎任何帮助。 非常感谢!

示例动态链接看起来像一个自定义域。 如果您使用自定义域作为动态链接前缀,则需要一些额外的配置。

检查此 链接

希望这可以帮助!

我有一个类似的问题:我同时使用深层链接和通用链接。 在 Android 上,一切都按预期工作,但在 iOS 上,在新安装后执行FirebaseDynamicLinks.instance.getInitialLink()始终是 null。

为了使深层链接正常工作,我不得不重写 AppDelegate 上的一个方法,而那个方法会干扰动态链接。 查看override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:])在那里我不得不初始化 FirebaseDynamicLink。 像这样的东西:

    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
      // Handle the deep link. 
      return true
    }
    return false
}

不要忘记在 AppDelegate 中import FirebaseDynamicLinks

我按照 Firebase 上的 iOS 官方指南接收动态链接:这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM