我正在做一个在 Vimeo 上分享视频的项目。在这个我的应用程序中打开一个视频,用户需要按下授权按钮在 Vimeo 上授权应用程序并获取访问令牌。因此,为此,我的应用程序会打开 safari 并在那里打开 Vimeo 的网站。用户需要按下允许按钮,然后它必须再次返回到应用程序。但我无法知道让 Safari/Vimeo 回到我的应用程序的回调 url 应该是什么。
请提出您对此的看法。
您需要通过编辑应用的 Info.plist 为您的应用设置自定义 URL 方案。Apple 的开发者网站上有大量关于此的文档。这是一篇详细介绍的文章:http: //iosdevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html
然后您的网站只需要打开一个使用您应用的 url 方案的 url(例如:myappscheme://do/something/cool?foo=bar)。如果您的应用关心通过您的网站传入的任何数据,则实现“application:openURL:sourceApplication:annotation:”方法并检查传入的 NSURL。您可以在 Apple 的文档中阅读更多相关信息:http://developer .apple.com/library/ios/#documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html
您需要为您的应用程序实现称为“URL Scheme”的东西,这意味着将您的应用程序注册到某个 url,以便可以从中打开它。
1)您应该在 info.plist 文件中添加一行。2)您需要在您的应用程序中收听 url,并执行所需的操作。
谷歌了解更多信息...
要支持自定义 URL 方案:
URL 必须以您的自定义方案名称开头。为您的应用支持的任何选项添加参数。例如,照片库应用程序可能会定义一个 URL 格式,其中包括要显示的相册的名称或索引。
一个例子是:
myphotoapp:albumname?name="foods"
myphotoapp:albumname?index=1
注册您的 URL 方案
处理传入的 URL
系统通过调用您的应用程序委托的应用程序(_:open:options:) method. you can use
NSURLComponents` API 来提取组件,将 URL 传递给您的应用程序。从系统提供的选项字典中获取有关 URL 的其他信息,例如哪个应用程序打开了它。
func application(_ application: UIApplication,
open url: URL,
options: [UIApplicationOpenURLOptionsKey : Any] = [:] ) -> Bool {
// Determine who sent the URL.
let sendingAppID = options[.sourceApplication]
print("source application = \(sendingAppID ?? "Unknown")")
// Process the URL.
guard let components = NSURLComponents(url: url, resolvingAgainstBaseURL: true),
let albumPath = components.path,
let params = components.queryItems else {
print("Invalid URL or album path missing")
return false
}
if let photoIndex = params.first(where: { $0.name == "index" })?.value {
print("albumPath = \(albumPath)")
print("photoIndex = \(photoIndex)")
return true
} else {
print("Photo index missing")
return false
}
}
如果您的应用已选择启用Scenes
,并且您的应用未运行,则系统会scene(_:willConnectTo:options:)
在启动后将 URL 传递给委托方法,以及scene(_:openURLContexts:)
当您的应用在内存中运行或挂起时打开 URL。
func scene(_ scene: UIScene,
willConnectTo session: UISceneSession,
options connectionOptions: UIScene.ConnectionOptions) {
// Determine who sent the URL.
if let urlContext = connectionOptions.urlContexts.first {
let sendingAppID = urlContext.options.sourceApplication
let url = urlContext.url
print("source application = \(sendingAppID ?? "Unknown")")
print("url = \(url)")
// Process the URL similarly to the UIApplicationDelegate example.
}
}