![](/img/trans.png)
[英]Firebase & iOS 14 > Will dynamic links tracking and campaigns continue to work?
[英]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.