我正在使用 firebase_dynamic_links 5.0.11 和 Flutter 3.3.9。我确实通过 firebase 实现了动态链接,并且它在 Android 版本 12 或更低版本上按预期工作。 问题仅在Android 13版本上,链接无法打开应用程序。 我确实找到了一些适用于 android 13 的解决方案,例如将 SHA-256 密钥添加到 Firebase 并将 android:autoVerify="true" 添加到 AndroidManifest。但他们并没有解决问题。 有人知道解决方案吗?
通过将 intent-filter 移动到 activity 中解决了这个问题。
我将其更改为:
<activity>
.....
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category
android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
.....
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category
android:name="android.intent.category.DEFAULT"/>
<category
android:name="android.intent.category.BROWSABLE"/>
<data
android:host="YOUR_CONTENT_LINK_DOMAIN"
android:scheme="https"/>
</intent-filter>
</activity>
到
<activity>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category
android:name="android.intent.category.DEFAULT"/>
<category
android:name="android.intent.category.BROWSABLE"/>
<data
android:host="YOUR_CONTENT_LINK_DOMAIN"
android:scheme="https"/>
</intent-filter>
.....
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category
android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
.....
</activity>
检查您的清单中是否有
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data
android:host="YOUR_CONTENT_LINK_DOMAIN"
android:scheme="https"/>
</intent-filter>
我在 Android 13 上遇到了同样的问题,但在 12 及更低版本上没问题。这个意图过滤器对我来说工作正常
对于 Android 13 版本意图过滤器进行了一些细微的更改。我遇到了同样的问题,我用下面的代码片段解决了这个问题。
如果您在应用程序中使用
flavouring
,那么您需要按照以下步骤操作:
在应用程序级别
build gradle
文件下添加 Firebase 主机链接到各个风格。
flavorDimensions "default"
productFlavors {
dev {
resValue "string", "app_name", "APP_NAME-D"
resValue "string", "dynamic_link_domain", "domain_url_dev"
dimension "default"
applicationIdSuffix ".dev"
}
staging {
resValue "string", "app_name", "APP_NAME-S"
resValue "string", "dynamic_link_domain", "domain_url_stg"
dimension "default"
applicationIdSuffix ".staging"
}
prod {
resValue "string", "app_name", "APP_NAME"
resValue "string", "dynamic_link_domain", "domain_url_prod"
dimension "default"
}
}
activity下的AndroidManifest.xml代码
意图过滤器 android:autoVerify="true"> // 如果你使用调味料
如果你不使用任何调味料,你可以尝试这样 只需在activity下添加AndroidManifest.xml代码即可
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data
android:host="DOMAIN_LINK"
android:scheme="https"/>
</intent-filter>
</activity>
<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:host="${deeplinkHost}" android:scheme="https"/>
</intent-filter>
对于 Android 13,在 Android 清单文件中添加 autoverify=true。
我有两个问题导致了这个问题:
host
来自 Firebase 动态链接的完整 URL 有子域,如下所示:https://customer.yourOwnDomain.com
所以你应该将你的子域名包含在
host
中,你也可以使用通配符 *
使其更加安全
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data
android:host="*.yourOwnDomain.com" // your domain + subdomain, not domain.page.link !!!
android:scheme="https"/>
</intent-filter>
您还必须将 SHA256 添加到 Firebase 控制台。请遵循此文档:Android 应用程序缺少 SHA256。该应用程序未启用 AppLinks。
我遇到了同样的问题,我的问题已通过添加解决。
android:autoVerify="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:host="sharecirclesapp.page.link"
android:scheme="https"/>
</intent-filter>