Firebase Dynami c Ссылки Короткий URL не работает должным образом - PullRequest
0 голосов
/ 14 апреля 2020

У меня две проблемы с ссылками 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;
}

Дополнительные примечания:

  1. Приложение еще не доступно в AppStore.
  2. Мы протестировали с помощью сборки выпуска. Бета-обзор не обрабатывается на этих сборках.
  3. Мы используем Objective C

Любая помощь по этому вопросу высоко ценится. Заранее спасибо.

enter image description here

...