因此,我试图在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)
这部分似乎都可以正常运行,如果我输入了google.com之类的重定向URL,则重定向到google即可。
但是,当尝试使用深度链接时,出现上述错误。
现在我认为这应该可行-
我已经在Xcode的功能部分启用了相关的域,
applinks:domain.com
并且我在Apple Developer的App ID中启用了关联的域
这里缺少什么?我需要一个apple-app-site-association文件吗?
我以前只使用过一次深层链接,所以我不太清楚自己可能会缺少什么。
也有一个包含相关域信息的权利文件。
答案 0 :(得分:4)
如果要使用URL调用应用,则必须在项目信息中设置URLType
:
注意,您必须选择编辑者作为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-association文件。但是 Google 正在将URL方案用于 google登录之类的任务
答案 1 :(得分:1)
我认为这可能与您应用的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>
希望这会有所帮助。
答案 2 :(得分:0)
您好,我正在使用由火力基地生成的深层链接网址。
我可以在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)
}
}
然后可以使用火力基地动态链接的委托在应用程序中打开
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
}
}
答案 3 :(得分:0)
答案是,由于App Store中已经存在URL方案标识符,因此将其视为重复项,这导致Apple称之为“奇怪行为”。
切换到更唯一的URL方案标识符可以立即解决该问题。