У меня две проблемы с ссылками Dynami c. Я включил приложение «Диагностика», и журнал не сообщает об ошибках.
Указанная пользовательская схема URL-адреса com. *****. **, и Info.plist содержит такую схему в CFBundleURLTypes key.performDiagnosti c успешно завершено! Ошибки не найдены.
Проблема 1:
Dynami c Короткие URL-адреса ссылок работают через браузер Safari в симуляторе (экран предварительного просмотра отображается на откройте приложение, а не открывайте его напрямую. Однако не работает на реальном устройстве. Прикрепление снимка экрана). Тем не менее, он не работает через электронную почту, Skype или WhatsApp et c. Приложение просыпается во всех случаях, вызывая continueUserActivity
с подробностями UserActivity
.
userActivity.webpageURL
возвращает Long URL
, а userActivity.referrerURL
возвращает мой Short URL
во время пробуждения приложения через экран предварительного просмотра браузера Safari на симуляторе.
userActivity.webpageURL
возвращает Short URL
(вместо Long URL
) и userActivity.referrerURL
возвращает https://mail.google.com/mail/mu/mp/789/ (вместо Short URL
) при пробуждении приложения через электронную почту, Skype или WhatsApp et c.
Проблема 2:
handleUniversalLink
Обратный вызов всегда возвращает NO
. Я позвонил stringByRemovingPercentEncoding
на userActivity.webpageURL
, прежде чем передать его на handleUniversalLink
. Все еще не повезло.
Длинный URL Пример:
baseurl.com /? Isi = 1505486543 & ibi = com% 2Eappname% 2Eiosappname & link = https% 3A% 2F% 2Fstaging% 2Edomain% 2Ecom% 2F% 3Freferral% 2Dcode% 1234569 & SI = HTTPS% 3A% 2F% 2Fappname% 2Dstaging% 2Es3% 2Dap% 2Dsitename% 2D1% 2Eamazonaws% 2Ecom% 2FReferralProgram% 2F1583824361% 5F1638450020% 2Ejpg & с.о. = ДОЛЯ% 20WITH% 20YOUR% 20FRIENDS & st = test & apn = com% 2Edomain% 2Eandroidappname
Пример короткого URL:
https://domain-deeplink-link.com/123456
код генерации длинных и коротких URL-адресов
NSURL *link = [[NSURL alloc] initWithString:[kBaseURLForShare stringByAppendingString:[NSString stringWithFormat:@"?referral-code=%@", self.lblReferralID.text]]];
NSString *dynamicLinksDomainURIPrefix = @"deeplink_url.com";
FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc]
initWithLink:link
domain:dynamicLinksDomainURIPrefix];
//iOS params
linkBuilder.iOSParameters = [[FIRDynamicLinkIOSParameters alloc]
initWithBundleID:@"iosbundle_id"];
linkBuilder.iOSParameters.appStoreID = @"store_id";
//Android params
linkBuilder.androidParameters = [[FIRDynamicLinkAndroidParameters alloc]
initWithPackageName:@"android_bundle_id"];
//Social params
linkBuilder.socialMetaTagParameters = [[FIRDynamicLinkSocialMetaTagParameters alloc] init];
if (self.bannerInfo.title.length > 0) {
linkBuilder.socialMetaTagParameters.title = self.bannerInfo.title;
}
if (self.bannerInfo.sharedDescription.length > 0) {
linkBuilder.socialMetaTagParameters.descriptionText = self.bannerInfo.sharedDescription;
}
if (self.bannerInfo.bannerURL.length > 0) {
linkBuilder.socialMetaTagParameters.imageURL = [NSURL URLWithString:[kBaseURLForFiles stringByAppendingString:_bannerInfo.bannerURL]];
}
[FIRDynamicLinkComponents shortenURL:linkBuilder.url
options:nil
completion:^(NSURL * _Nullable shortURL,
NSArray<NSString *> * _Nullable warnings,
NSError * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
[self->_progressHUD hideWithoutAnimation];
self->_progressHUD = nil;
if (error) {
[self showToast:error.localizedDescription];
}
else if (shortURL == nil) {
[self showToast:@"No deeplink URL found!"];
}
else {
[self shareReferralProgramToApps:shortURL.absoluteString Sender:sender];
}
});
}];
код AppDelegate:
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url];
if (dynamicLink) {
if (dynamicLink.url) {
[self processDynamicURL:dynamicLink.url.absoluteString];
} else {
// Dynamic link has empty deep link. This situation will happens if
// Firebase Dynamic Links iOS SDK tried to retrieve pending dynamic link,
// but pending link is not available for this device/App combination.
// At this point you may display default onboarding view.
}
return YES;
}
return NO;
}
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity
restorationHandler:
#if defined(__IPHONE_12_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_12_0)
(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> *_Nullable))restorationHandler {
#else
(nonnull void (^)(NSArray *_Nullable))restorationHandler {
#endif // __IPHONE_12_0
NSURL *activityURL = [NSURL URLWithString:[userActivity.webpageURL.absoluteString stringByRemovingPercentEncoding]];
BOOL handled = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:activityURL
completion:^(FIRDynamicLink * _Nullable dynamicLink,
NSError * _Nullable error) {
[self processDynamicURL:dynamicLink.url.absoluteString];
}];
return handled;
}
Дополнительные примечания:
- Приложение еще не доступно в AppStore.
- Мы протестировали с помощью сборки выпуска. Бета-обзор не обрабатывается на этих сборках.
- Мы используем Objective C
Любая помощь по этому вопросу высоко ценится. Заранее спасибо.
![enter image description here](https://i.stack.imgur.com/ayHKp.jpg)