1

DropBox SDK for iOSを使い始めましたが、ログインが成功したかどうかを検出するコードは次のようになっています。

AppDelegateで:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    if ([[DBSession sharedSession] isLinked])
    {
       // Success
    }
    else
    {
        // Failed
    }
    return YES;
}

障害が発生した場合、どうすれば原因を特定できますか?少なくともエラーとキャンセルを区別したいと思います。

4

3 に答える 3

3

キャンセルを識別するには

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

    NSArray *components = [[url path] pathComponents];
    NSString *methodName = [components count] > 1 ? [components objectAtIndex:1] : nil;
    if ([methodName isEqual:@"cancel"]) {
        NSLog(@"Dropbox link Cancelled");
    }
}
于 2012-12-17T08:58:50.887 に答える
1

誰かがこれに出くわし、バラの答えに行き詰まった場合、それはその方法handleOpenURLが時代遅れであるためです。DropboxはopenURL現在使用しています。openURLはアプリデリゲートに入ります。

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url sourceApplication:(NSString *)source annotation:(id)annotation {
if ([[DBSession sharedSession] handleOpenURL:url]) {
    if ([[DBSession sharedSession] isLinked]) {
        NSLog(@"App linked successfully!");
        // At this point you can start making API calls
        // Send notification to load an initial root dropbox path
        [[NSNotificationCenter defaultCenter] postNotificationName:@"getDropboxRoot" object:self];
    }else{// Add whatever other url handling code your app requires here in this else
        //if the user clicks cancel that will appear here in the methodName variable,
        //we post a notification to wherever we want.
        NSArray* components =  [[url path] pathComponents];
        NSString *methodName = [components count] > 1 ? [components objectAtIndex:1] : nil;
        if ([methodName isEqual:@"cancel"]) {
            NSLog(@"Dropbox link Cancelled");
            [[NSNotificationCenter defaultCenter] postNotificationName:@"dropboxRegistrationCancel" object:self];
        }
    }
    return YES;
}
return NO;}

基本的にキャンセルを検出するには、「キャンセル」という単語のURLコンポーネントを確認し、見つかった場合は、アプリケーションに適用される場所に通知を送信して、ユーザーがプロセスをキャンセルしたことを通知します。

通知投稿のオブザーバーコード。上記の通知を検出する場所に配置します。

    [[NSNotificationCenter defaultCenter] addObserver:self
                                      selector:@selector(dropboxRegistrationCancel)
                                      name:@"dropboxRegistrationCancel"
                                      object:nil];
-(void) dropboxRegistrationCancel{
/*do stuff here that you want to do when the @"dropboxRegistrationCancelled" is triggered*/}
于 2015-07-19T00:55:39.277 に答える
0

私は私のために働いた以下のコードを使用しました、それはユーザーがドロップボックスログインをキャンセルしたかユーザーログインが成功した場合の両方の条件で役立ちます

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
NSString *stringUrl = [url absoluteString];
if ([stringUrl containsString:@"cancel"]) {

    // Handle if user cancelled the login
    [[NSNotificationCenter defaultCenter] postNotificationName:@"dropboxRegistrationCancel" object:self];

    return NO;

}
if ([[DBSession sharedSession] handleOpenURL:url]) {
    if ([[DBSession sharedSession] isLinked]) {
        // From below notification u can fetch your data from Dropbox
        [[NSNotificationCenter defaultCenter]
         postNotificationName:@"isDropboxLinked"
         object:[NSNumber numberWithBool:[[DBSession sharedSession] isLinked]]];
// Add whatever other url handling code your app requires here

    }
    return YES;
} return NO; 
}

ログイン後に初めてファイルをフェッチするには、viewDidLoadでファイルのリストを表示しているクラスにこのコードを配置します

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(isDropboxLinkedHandle:) name:@"isDropboxLinked" object:nil];

および isDropboxLinkedHandleの実装:

- (void)isDropboxLinkedHandle:(id)sender {
if ([[sender object] intValue]) {
    // fetch all files 
    [[self restClient] loadMetadata:@"/"];
 }
}

それが感謝に役立つことを願っています。

于 2016-06-17T07:38:37.073 に答える