回复iOS应用的网址?

时间:2013-07-09 05:06:58

标签: iphone ios callback vimeo vimeo-api

我正在开展一个项目,我在Vimeo上分享视频。在这个我的应用程序中打开一个视频,用户需要按下授权按钮在Vimeo上授权应用程序并获取访问令牌。所以,为此,我的应用程序打开safari并在那里打开Vimeo的网站。用户需要按下允许按钮,然后它必须再次返回到应用程序。但我无法知道回调网址应该是什么让Safari / Vimeo回到我的应用程序。

请提出您对此的看法。

3 个答案:

答案 0 :(得分:17)

您需要通过编辑应用的Info.plist为您的应用设置自定义网址方案。在Apple的开发者网站上有大量关于此的文档。这是一篇详细介绍的文章:http://iosdevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html

然后您的网站只需要打开一个使用您应用的网址方案的网址(例如: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

答案 1 :(得分:2)

您需要为您的应用实施名为“网址计划”的内容,这意味着将您的应用注册到某个网址,以便可以从中打开。

1)您应该在info.plist文件中添加一行。 2)您需要收听应用中的网址,然后执行所需操作。

Google了解更多信息......

答案 2 :(得分:0)

支持自定义 URL 方案:

  1. 定义应用网址的格式。
  2. 注册您的方案,以便系统将适当的网址定向到您的应用。
  3. 处理您的应用收到的网址。

网址必须以您的自定义方案名称开头。为您的应用支持的任何选项添加参数。例如,照片库应用可能会定义一种 URL 格式,其中包含要显示的相册的名称或索引。

一个例子是:

myphotoapp:albumname?name="foods"
myphotoapp:albumname?index=1

注册您的 URL Scheme

enter image description here

  1. 点击项目目标并转到信息页面
  2. 在信息页面中展开 URL Types 部分并点击 + 按钮
  3. 用适当的值填充字段。

处理传入的 URL

系统通过调用您的应用委托的 application(_:open:options:)method. you can useNSURLComponents` 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:) 委托方法,并在您的应用打开时传递给 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.
    }
}