简体   繁体   English

OSX Dropbox Sync API错误-无法验证链接请求

[英]OSX Dropbox Sync API Error - unable to verify link request

Coded in Swift I implemented after the Tutorial. 在本教程之后实现的Swift中编码。

DBAccountManager is setup in AppDelegate on applicationDidFinishLaunching. DBAccountManager是在applicationDidFinishLaunching上的AppDelegate中设置的。

Later, when the user activates dropbox support in my application I'm trying to link the account. 稍后,当用户在我的应用程序中激活保管箱支持时,我正在尝试链接该帐户。 The Window Panel is displayed and my application is waiting for the callback. 显示窗口面板,我的应用程序正在等待回调。

Sometimes I do not get a linked account, even the user logs in and accepts. 有时,即使用户登录并接受我也没有链接帐户。

The Log says "[ERROR] unable to verify link request" 日志显示“ [ERROR]无法验证链接请求”

When this occurs on a machine it wont't work, you can retry and retry... if it worked, it works like a charm and in future I always get the linked account directly from the library without the login window. 如果在无法使用的计算机上发生这种情况,则可以重试...如果有效,它就像一个超级按钮,将来我总是直接从库中获取链接帐户,而无需登录窗口。

What does this error mean and what can I do? 此错误是什么意思,我该怎么办?

AppDelegate: AppDelegate:

func applicationDidFinishLaunching(aNotification: NSNotification) {
    // Dropbox API Key & Secret
    let _appKey = "------"
    let _appSecret = "------"

    // Accountmanager
    if (DBAccountManager.sharedManager() == nil)
    {
        let accountManager = DBAccountManager(appKey: _appKey, secret: _appSecret)
        DBAccountManager.setSharedManager(accountManager)
    }

    ....
 }

The linking in my class, when user clicked to activate dropbox: 用户单击以激活保管箱时,我班级中的链接:

internal func __start(parentWindow:NSWindow?, callback:((Bool) -> Void))
{
    let am = DBAccountManager.sharedManager()        
    if am == nil
    {
        NSLog("Dropbox not available!")
        callback!(false)
        return           
    }
    // link account
    let linkedAccount = am!.linkedAccount

    if (linkedAccount != nil)
    {
        // Already linked
        DLog("Dropbox link found.")
        let fileSystem = DBFilesystem(account: linkedAccount!)
        DBFilesystem.setSharedFilesystem(fileSystem)
        callback(true)
    }
    else
    {
        // link with window must be in mainthread
        dispatch_async(dispatch_get_main_queue())
        {
            am!.linkFromWindow(parentWindow) {
                account in

                if (account != nil)
                {
                    DLog("Dropbox linked")
                    let fileSystem = DBFilesystem(account: account!)
                    DBFilesystem.setSharedFilesystem(fileSystem)
                    callback(true)
                }
                else
                {
                    DLog("NOT LINKED (Dropbox)")
                    callback(false)
                } // if - else account
            } // accountmanager block
        } // dispatchblock main
    } // if - else linkedaccount
}

Here the full log, the app is not doing anything else: 在完整日志中,该应用未执行任何其他操作:

2015-02-23 10:25:39.443 TestApp[39226:30958267] Dropbox init
<<<< MediaValidator >>>> mv_ValidateRFC4281CodecId: Unrecognized codec 1.(null). Failed codec specific check.
<<<< MediaValidator >>>> mv_LookupCodecSupport: Unrecognized codec 1
[10:25:40.979] mv_LowLevelCheckIfVideoPlayableUsingDecoder signalled err=-12956 (kFigMediaValidatorError_VideoCodecNotSupported) (video codec 1) at  line 1851
<<<< MediaValidator >>>> mv_TestCodecSupportUsingDecoders: Unrecognized codec 1
<<<< MediaValidator >>>> mv_ValidateRFC4281CodecId: Unrecognized codec 1.(null). Failed codec specific check.
<<<< MediaValidator >>>> mv_LookupCodecSupport: Unrecognized codec 1
[10:25:40.979] mv_LowLevelCheckIfVideoPlayableUsingDecoder signalled err=-12956 (kFigMediaValidatorError_VideoCodecNotSupported) (video codec 1) at  line 1851
<<<< MediaValidator >>>> mv_TestCodecSupportUsingDecoders: Unrecognized codec 1
2015-02-23 10:25:43.873 TestApp[39226:30958267] [ERROR] unable to verify link request
2015-02-23 10:25:43.879 TestApp[39226:30958267] NOT LINKED (Dropbox)

I have same issue [ERROR] unable to verify link request after long research and studying the DropBoxSDK I come to the point that this error occurs when state ID is different from value saved at key KDBKLinkNonce . 经过长时间的研究和研究DropBoxSDK,我遇到了相同的问题[ERROR]无法验证链接请求。我得出的结论是,当状态ID与保存在键KDBKLinkNonce上的值不同时,将发生此错误。 Every time at new Session it generates new state ID. 每次在新会话上,它都会生成新的状态ID。 See below code of [[DBSession sharedSession] handleOpenURL:url] method. 请参见下面的[[DBSession sharedSession] handleOpenURL:url]方法的代码。

- (BOOL)handleOpenURL:(NSURL *)url {
NSString *expected = [NSString stringWithFormat:@"%@://%@/", [self appScheme], kDBDropboxAPIVersion];
if (![[url absoluteString] hasPrefix:expected]) {
    return NO;
}

NSArray *components = [[url path] pathComponents];
NSString *methodName = [components count] > 1 ? [components objectAtIndex:1] : nil;

if ([methodName isEqual:@"connect"]) {
    NSDictionary *params = [DBSession parseURLParams:[url query]];
    NSString *token = [params objectForKey:@"oauth_token"];
    NSString *secret = [params objectForKey:@"oauth_token_secret"];
    NSString *userId = [params objectForKey:@"uid"];

    NSString *state = [params objectForKey:@"state"];
    NSString *nonce = [[NSUserDefaults standardUserDefaults] objectForKey:kDBLinkNonce];
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:kDBLinkNonce];
    [[NSUserDefaults standardUserDefaults] synchronize];
    if (![nonce isEqual:state]) {
        DBLogError(@"unable to verify link request");
        return NO;
    }

    [self updateAccessToken:token accessTokenSecret:secret forUserId:userId];
} else if ([methodName isEqual:@"cancel"]) {
    DBLogInfo(@"DropboxSDK: user cancelled Dropbox link");
}

return YES; }

For further reference please check this link dropbox-sdk-ios 有关更多参考,请检查此链接dropbox-sdk-ios

I found something and since I found a fix for that, even the dropbox error is gone. 我找到了一些东西,并且由于找到了解决方法,所以即使投寄箱错误也消失了。

The problem seems to be, that NSUserDefaults did not store any data (not in memory and not on disk!). 问题似乎是NSUserDefaults没有存储任何数据(不在内存中,也不在磁盘上!)。 Since Dropbox uses NSUserDefaults to check the state before and after, this killed the whole process. 由于Dropbox使用NSUserDefaults前后检查状态,因此这杀死了整个过程。 With getting the NSUserDefaults back working it seems the whole dropbox problem was gone. 恢复NSUserDefaults后,似乎整个保管箱问题都消失了。 OSX NSUserDefaults not Working OSX NSUserDefaults不起作用

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM