未使用DropBox SDK为iPhone应用程序调用handOpenURL

未使用DropBox SDK为iPhone应用程序调用handOpenURL,iphone,objective-c,ios,dropbox,dropbox-api,Iphone,Objective C,Ios,Dropbox,Dropbox Api,我使用的是MacOSX 10.6,Xcode模拟器是4.2,但在尽了最大努力之后,handleOpenURL在我的appdelegate.m文件中没有被调用,我在那里实现了它。我已经按照DropBox站点()中给出的教程中的所有说明进行了操作 但是,一旦用户允许我的应用程序访问,在通过safari从dropbox帐户登录后,控件将重定向到我的“与dropbox的链接”视图,即用户有机会登录的视图 问题是,handleOpenURL方法没有被调用,didfinishWithLaunchingOpt

我使用的是MacOSX 10.6,Xcode模拟器是4.2,但在尽了最大努力之后,handleOpenURL在我的appdelegate.m文件中没有被调用,我在那里实现了它。我已经按照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;
}

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

更多

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

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

如果上述方法无效,你一定是做错了别的事情。然后更仔细地遵循DropBox的教程。

如果swift>=iOS 13,则向ScenedLegate.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)")
            }
        }
    }
}
func场景(scene:UIScene,openURLContexts:Set){
如果让url=URLContexts.first?.url{
打印(url)
如果让authResult=DropboxClientsManager.handleRedirectURL(url){
切换authResult{
成功案例:
打印(“成功!用户已登录Dropbox。”)
案例。取消:
打印(“用户手动取消了授权流!”)
案例错误(Ulet,描述):
打印(“错误:\(说明)”)
}
}
}
}
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)")
            }
        }
    }
}