1

我使用的是 MacOSX 10.6,Xcode 模拟器是 4.2,但是在尽我所能之后,我的 appdelegate.m 文件中没有调用 handleOpenURL,我已经在其中实现了它。我已按照 DropBox 站点(DropBox 教程)中给出的教程中的所有说明进行操作,

但是,一旦用户允许我的应用程序访问,在通过 safari 从那里的 dropbox 帐户登录后,控件将重定向到我的“与 DropBox 链接”视图,即用户有机会登录的视图,

问题是,没有调用 handleOpenURL 方法,也没有调用 didfinishWithLaunchingOptions 方法。我在同一个主题相关的各个论坛的一些帖子中看到,如果我们实现后者(didfinishWithLaunchingOptions)方法,handleOpenWithURL 将不会被调用,是这样吗?

如果没有,你能帮我找出我的代码中的错误吗?我是这个领域的初学者,非常感谢你在这方面的帮助。

以下是 appdelegate.m 文件中的代码片段

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{  
   NSLog(@"Inside didfinishwithoptions");
   DBSession* dbSession = [[[DBSession alloc] initWithAppKey:@"APP-KEY" 
                                                appSecret:@"APP-SECRET"
                                                     root:kDBRootAppFolder] // either kDBRootAppFolder or kDBRootDropbox
                        autorelease];
   [DBSession setSharedSession:dbSession];
   // Override point for customization after application launch.

   // Add the view controller's view to the window and display.
   [self.window addSubview:viewController.view];
   [self.window makeKeyAndVisible];

   return YES;
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
{
    NSLog(@"Inside handleOpenURL");
    return NO;
}
4

2 回答 2

2

我认为application:handleOpenURL:当您将目标设置为 iOS 4.2 或更高版本时不会调用它。改为使用application:openURL:sourceApplication:annotation:

UIApplicationDelegate 文档中的更多内容。

更新:
您是否仔细检查了您CFBundleURLTypes在应用程序的 plist 文件中的条目?它应该像这样:

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLName</key>
    <string>DropBoxURLScheme</string>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>db-something</string>
    </array>
  </dict>
</array>

比您初始化会话(请注意,上面的“某物”部分用作应用程序密钥):

DBSession* dbSession = [[[DBSession alloc] initWithAppKey:@"something" appSecret:@"APP_SECRET" root:ACCESS_TYPE] autorelease];

如果上面没有帮助,你一定做错了别的事情。然后更仔细地遵循 DropBox 的教程。

于 2012-01-19T13:18:24.937 回答
0

在 swift >= iOS 13 的情况下,将以下函数添加到 SceneDelegate.swift 似乎有效:

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    if let url = URLContexts.first?.url {
        print(url)
        
        if let authResult = DropboxClientsManager.handleRedirectURL(url) {
            switch authResult {
            case .success:
                print("Success! User is logged into Dropbox.")
            case .cancel:
                print("Authorization flow was manually canceled by user!")
            case .error(_, let description):
                print("Error: \(description)")
            }
        }
    }
}
于 2020-07-19T09:13:57.943 回答