# #firebase #flutter #firebase-dynamic-links
Вопрос:
Я пытаюсь использовать динамические ссылки в своем приложении flutter для приглашения новых пользователей.
Он отлично работает на Android, но не работает на IOS.
сообщение:
2021-08-30 15:31:09.260470 0900 Runner[9221:902508] 8.3.0 - [Firebase/Analytics][IACS023001] Deep Link does not contain valid required params. URL params: {
"_cpb" = 1;
"_cpt" = cpit;
"_fpb" = "CJsFEPcCGgVrby1rcg==";
"_iumchkactval" = 1;
"_iumenbl" = 1;
"_osl" = "https://myapp.page.link/ryZWzXFzVqY3sjE4A";
"_plt" = 981;
"_uit" = 2105;
apn = "com.example.myapp";
cid = 2464839987823306368;
ibi = "com.example.myappios";
isi = app store id;
link = "https://invite.friends.myapp/invite_from?uid={uid_string}";
}
Мои коды:
Создание динамических ссылок
String? uid = FirebaseAuth.instance.currentUser?.uid;
final DynamicLinkParameters parameters =
DynamicLinkParameters(
uriPrefix: 'https://potendogs.page.link',
link: Uri.parse(
'https://invite.friends.myapp/invite_from?uid=$uid'),
androidParameters: AndroidParameters(
packageName: 'com.example.myapp',
),
iosParameters: IosParameters(
bundleId: 'com.example.myappios',
appStoreId: 'app store id',
),
);
final ShortDynamicLink shortUrl =
await parameters.buildShortLink();
Share.share('invite_message'.tr() shortUrl.shortUrl.toString());
Получение динамических ссылок
void initDynamicLinks() async {
FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData? dynamicLink) async {
final Uri? deepLink = dynamicLink?.link;
if (deepLink != null) {
String? uid = FirebaseAuth.instance.currentUser?.uid;
String? ownerUid = deepLink.queryParameters['uid'];
if (uid != null amp;amp; ownerUid != null) {
_inviteCouponBloc
.add(NewUserInviteCouponEvent(uid: uid, ownerUid: ownerUid));
}
}
}, onError: (OnLinkErrorException e) async {
print('OnLinkError');
print(e.message);
print(e.stacktrace);
});
final PendingDynamicLinkData? data =
await FirebaseDynamicLinks.instance.getInitialLink();
final Uri? deepLink = data?.link;
if (deepLink != null) {
if (widget.isNewUser) {
String? uid = FirebaseAuth.instance.currentUser?.uid;
String? ownerUid = deepLink.queryParameters['uid'];
if (uid != null amp;amp; ownerUid != null) {
_inviteCouponBloc
.add(NewUserInviteCouponEvent(uid: uid, ownerUid: ownerUid));
} else {
print('firebase uid is null');
}
}
}
}
I call initDynamicLinks()
in initState()
The Generated dynamic link(short) look like this: https://myapp.page.link/Df6MA2Xf34CTENgs9
But in IOS, some log shows how IOS get dynamic links link this
"iOS handleLink: https://myapp.page.link/?link=https://invite.friends.myapp/invite_from?uid=66kWqpCU1ddHfErvtyucOHK3KoI3amp;apn=com.example.myappamp;isi={app store id}amp;ibi=com.example.myappiosamp;cid=2464839987823306368amp;_osl=https://myapp.page.link/ryZWzXFzVqY3sjE4Aamp;_fpb=CJsFEPcCGgVrby1rcg==amp;_cpt=cpitamp;_iumenbl=1amp;_iumchkactval=1amp;_plt=981amp;_uit=2105amp;_cpb=1"
как я могу решить эту проблему?
записка
У меня разные идентификаторы пакетов ios и android.
идентификатор пакета android: com.пример.myapp идентификатор пакета
ios: com.пример.myappios
Я заполнил все входы на консоли firebase.
кроме того, появляется предупреждение, когда я создаю динамические ссылки, такие как:
[В приложении для Android «com.example.myappios» не хватает SHA256. Ссылки на приложения не включены для приложения. [https://firebase.google.com/docs/dynamic-links/debug#android-sha256-absent],
В приложении iOS «com.example.myapp» отсутствует префикс идентификатора приложения. Универсальные ссылки не включены для приложения. [https://firebase.google.com/docs/dynamic-links/debug#ios-team-id-absent],
В этом домене нет конфигурации для предотвращения фишинга https://myapp.page.link. Настройте шаблоны URL-адресов в белый список в консоли динамических ссылок Firebase. [https://support.google.com/firebase/answer/9021429]]
Редактировать
Переменная deepLink
от dynamicLink?.link
и
await FirebaseDynamicLinks.instance.getInitialLink()?.link
равно нулю
Ответ №1:
Проверьте, изменяет ли внешний API или служба ваш URL-адрес.
В моем случае платежный api изменил URL-адрес, и устройства iOS отказали.