Safari не может открыть страницу - ошибка «Невозможно отобразить URL» - связана с Deeplinks? - PullRequest
0 голосов
/ 25 октября 2018

Поэтому я пытаюсь использовать глубокие ссылки в приложении для iOS, например, так (заметьте, домен здесь является фиктивным значением):

static let redirectUrlStr = "domain://domain:success"

И

private let redirectUrl = URL(string: .redirectUrlStr)!

И я передаюэто как перенаправление на запрос AppAuth:

let request = OIDTokenRequest(configuration: config!,
                              grantType: .refreshGrantType,
                              authorizationCode: nil,
                              redirectURL: self.redirectUrl,
                              clientID: .clientId,
                              clientSecret: nil,
                              scopes: [OIDScopeOpenID, OIDScopeProfile, OIDScopeEmail],
                              refreshToken: userCredentials.refreshToken,
                              codeVerifier: nil,
                              additionalParameters: nil)

Эта часть, кажется, работает, и если я передаю URL-адрес перенаправления, такой как google.com, перенаправление на Google работает.

Однако, при попытке использовать глубокую ссылку, я получаю вышеупомянутую ошибку.

Теперь я думаю, что это должно работать -

Я включил связанные домены в части возможностей XCode как:

applinks: domain.com

И у меня включены связанные домены в идентификаторе приложения в Apple Developer

Чего здесь не хватает?Нужен ли мне файл apple-app-site-association?

Я работал с глубокими ссылками только один раз, поэтому мне не очень понятно, чего мне не хватает.

Естьтакже файл разрешений с информацией о соответствующем домене.

Ответы [ 4 ]

0 голосов
/ 05 ноября 2018

Ответ заключается в том, что из-за идентификатора схемы URL, уже существующего в App Store, он считается дубликатом, и это вызывает то, что Apple описывает как «странное поведение».

Переключение на более уникальныйИдентификатор схемы URL-адреса немедленно решил проблему.

0 голосов
/ 31 октября 2018

Привет! Я использую URL-адрес с глубокими ссылками, сгенерированный базой огня.

Я могу открыть этот URL в Google и Safari, мой код:

/// Deepl link Shared Link
    func deepLinkShare(_ data: CSSharedObject, sender: Any, isVideoDetail: Bool = false) {
        let button = sender as? UIButton
        button?.startAnimating()
        let videoLink = SHAREURL + "video/" + data.videoSlug + "?videoId=" + String(data.videoId)
        guard let link = URL(string: videoLink) else { return }
        let dynamicLinksDomain = DEEPLINKDOMAIN
        let linkBuilder = DynamicLinkComponents(link: link, domain: dynamicLinksDomain)
        linkBuilder.iOSParameters = DynamicLinkIOSParameters.init(bundleID: Bundle.main.bundleIdentifier!)
        linkBuilder.iOSParameters?.customScheme = CUSTOMURLSCHEME
        linkBuilder.iOSParameters?.minimumAppVersion = "1.0"
        linkBuilder.navigationInfoParameters?.isForcedRedirectEnabled = false
        linkBuilder.iOSParameters?.appStoreID = "123456789"
        linkBuilder.analyticsParameters = DynamicLinkGoogleAnalyticsParameters(source: "asfdsf",
                                                                               medium: "video",
                                                                               campaign: "Share")
        linkBuilder.socialMetaTagParameters = DynamicLinkSocialMetaTagParameters()
        linkBuilder.socialMetaTagParameters?.title = data.videoTitle
        linkBuilder.socialMetaTagParameters?.descriptionText = data.videoShortDescription
        linkBuilder.socialMetaTagParameters?.imageURL = data.thumbNailimage
        linkBuilder.androidParameters = DynamicLinkAndroidParameters(packageName: ANDROIDAPPBUNDLE)
        linkBuilder.options = DynamicLinkComponentsOptions()
        linkBuilder.options?.pathLength = .short
        guard let longDynamicLink = linkBuilder.url else { return }
        DynamicLinkComponents.shortenURL(longDynamicLink, options: nil) { url, _, error in
            button?.stopAnimating()
            guard let url = url, error == nil else { return }
            /// item to be shared
            let shareItems: Array = [url.absoluteString] as [Any]
            self.openSharePopUp(sender, sharedItems: shareItems, isVideoDetail: isVideoDetail)
        }
    }
  1. CSShared Objectэто объект, который имеет пользовательский объект
  2. data.videoSlug - это данные элемента, которые используются для построения URL
  3. DEEPLINKDOMAIN - это домен домена Deeplink, сгенерированный пожарной базой it
  4. CUSTOMURLSCHEME - это пользовательская схема, сгенерированная для этого конкретного приложения

. Затем ее можно открыть в приложении с помощью делегата пожарной базы. Динамическое связывание

func application(_ application: UIApplication, open url: URL, sourceApplication: String?,
                     annotation: Any) -> Bool {
        if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
            /// Open the dynamic link url in your application

            return true
        }
    }
0 голосов
/ 03 ноября 2018

Если вы хотите вызвать ваше приложение по URL, вы должны установить URLType в информации о вашем проекте:

enter image description here

Примечание что вы должны выбрать редактор как Role вашего URL scheme.Теперь вы можете вызывать ваше приложение с помощью domain:// и следовать этому URL с любым параметром запроса или пути, который вы будете передавать в свое приложение, например: domain://users?id=12

Если вам нужен исходный домен для пересылки на вашприложение, например: www.domain.com/users вместо domain://users, ДА вам нужна apple-app-site-association , загруженная в корневой каталог вашего хоста.Таким образом, iOS может обнаружить его и , если пользователь предпочитает , ваше приложение откроется и соответствующий URL будет передан вашему приложению.

Оба эти метода имеют свои плюсы и минусы. Instagram и AppStore используют свой оригинальный домен с ассоциированным файлом apple-app-site-site.Но Google использует схему URL для таких задач, как вход в Google enter image description here

0 голосов
/ 31 октября 2018

Я думаю, это может быть связано с обработкой схемы URL вашего приложения.Если вы не обновите свой plist, чтобы сообщить операционной системе о том, что вы обрабатываете domain схему URL, тогда он будет выглядеть как опечатка URL.Попробуйте добавить domain в URL Types -> URL Schemes вашего Info.plist файла.Вы можете сделать это через:

  <key>CFBundleURLTypes</key>
  <array>
    <dict>
        <key>CFBundleURLName</key>
        <string>com.domain</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>domain</string>
        </array>
    </dict>
  </array>

Надеюсь, это поможет.

...