2013-03-05 14 views
8

Potrzebujemy utworzyć udostępniony link do pliku, a następnie pobrać ten link, abyśmy mogli go wyświetlić w naszej aplikacji. Jesteśmy w stanie utworzyć udostępniony link do określonego pliku (widzimy go wewnątrz Konta skrzynki w Internecie), ale nie jesteśmy w stanie pobrać sharedLink za pośrednictwem interfejsu API. Jest zawsze zerowe, chociaż metoda zwraca TAK.iOS BoxSDK zwraca zero dla sharedLink

Z pliku nagłówkowego BoxObject.h wynika, że ​​te dwie metody zapewniają wymagane informacje na temat stanu współdzielonego elementu.

@protocol BoxObject 
// ... 


// Information about the shared state of the item 
@property (readonly, getter = isShared) BOOL shared; 
@property (readonly) NSString *sharedLink; 

//... 
@end 

W ten sposób tworzymy łącze udostępnione.

  1. Znajdź BoxFile że chcielibyśmy się podzielić, pozwala wywołać tego obiektu zdjęcie Przed sposób wywołujący shareWithPassword: Wiadomość e-maile: callbacks :, [photo isShared] nie zwraca.
  2. nazywamy [photo shareWithPassword:@"" message:@"" emails:[NSArray arrayWithObject:@""] callbacks:^(id<BoxOperationCallbacks> on1){...}];
  3. wewnątrz on1.after to należy sprawdzić, czy odpowiedź == BoxCallbackResponseSuccessful i nazywamy [updateWithCallbacks fotograficznych:^(id on2) {..}]
  4. wewnątrz jeśli on2.after sprawdzamy odpowiedź == BoxCallbackResponseSuccessful
  5. po pomyślnym odpowiedzi [photo isShared] zwraca TAK ale [zdjęcia sharedLink] zwraca nil

A jeśli możemy sprawdzić w sieci, możemy zobaczyć, że plik jest w rzeczywistości udostępnione, ale my nie możemy pobrać sharedLink z Box SDK.

Ktoś ma ten sam problem?

+0

Byłoby pomocne, gdyby można było opublikować ruch HTTP podczas tego procesu. Informacje te pomogą wyizolować problem zarówno do danych wysyłanych przez Box, jak i do sposobu, w jaki SDK iOS go interpretuje. Jeśli pracujesz na komputerze Mac, możesz użyć narzędzia takiego jak HTTPScoop do przechwytywania ruchu. –

+0

Próbowałem już tego z Wireshark. Żądania przechodzą przez HTTPS i nie jestem świadomy, czy istnieje sposób wymuszania ich przez HTTP. – dtrsan

+0

HTTPScoop [podaje pewne informacje] (http://www.tuffcode.com/support.html#support7), w jaki sposób można obejść ten problem. –

Odpowiedz

0

Udało mi się uzyskać link do udziału poprzez odświeżenie samego folderu. To jest kod, który wymyśliłem:

[boxFile shareWithPassword:@"" message:@"" emails:@[ @"" ] callbacks:^(id<BoxOperationCallbacks> on) { 
    on.after(^(BoxCallbackResponse response) { 
     if (response == BoxCallbackResponseSuccessful) { 
      [self.rootFolder updateWithCallbacks:^(id<BoxOperationCallbacks> on) { 
       on.after(^(BoxCallbackResponse response) { 
        BoxFile *updatedBoxFile = (BoxFile*)[self.rootFolder.children objectAtIndex:self.selectedIndexPath.row]; 
        NSString *fileName = updatedBoxFile.name; 
        NSString *shareLink = updatedBoxFile.sharedLink; 

        NSLog(@"%@ [%@]: %@", fileName, updatedBoxFile.isShared ? @"YES" : @"NO", shareLink); 
       }); 
      }]; 
     } else { 
      [BoxErrorHandler presentErrorAlertViewForResponse:response]; 
     } 
    }); 
}]; 

Jest to ze starym API v1. Nie jestem pewien, czy zmienił się z nowszym v2.

0

Można utworzyć wspólny odnośnik Edit jej informacji z pudełkiem V2:

Box2FolderBlock folderSuccess = ^(Box2Folder *folder) { 
    if (![[folder sharedLink] isEqual:[NSNull null]]) { 
     NSString *sharedUrl = [[folder sharedLink] objectForKey:Box2APIObjectKeyURL]; 
    } else { 
     // failure 
    } 
}; 

Box2FileBlock fileSuccess = ^(Box2File *file) { 
    if (![[file sharedLink] isEqual:[NSNull null]]) { 
     NSString *sharedUrl = [[file sharedLink] objectForKey:Box2APIObjectKeyURL]; 
    } else { 
     // failure 
    } 
}; 

Box2APIJSONFailureBlock failure = ^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSDictionary *JSONDictionary) { 
}; 

BoxSharedObjectBuilder *sharedLinkObject = [[BoxSharedObjectBuilder alloc] init]; 
sharedLinkObject.access = BoxAPISharedObjectAccessOpen; 

BoxAPIJSONOperation *operation; 

if (isFile == NO) { 

    sharedLinkObject.canPreview = BoxAPISharedObjectPermissionStateEnabled; 

    BoxFoldersRequestBuilder *requestBuilder = [[BoxFoldersRequestBuilder alloc] init]; 
    requestBuilder.sharedLink = sharedLinkObject; 

    operation = [boxSDK.foldersManager editFolderWithID:fileOrFolderId requestBuilder:requestBuilder success:folderSuccess failure:failure]; 

} else { 

    sharedLinkObject.canDownload = BoxAPISharedObjectPermissionStateEnabled; 

    BoxFilesRequestBuilder *requestBuilder = [[BoxFilesRequestBuilder alloc] init]; 
    requestBuilder.sharedLink = sharedLinkObject; 

    operation = [boxSDK.filesManager editFileWithID:fileOrFolderId requestBuilder:requestBuilder success:fileSuccess failure:failure]; 
} 
1

To działa dla mnie, opiera się na kodzie już pisał i informacji znajdujących się na github here

- (void) getShareableLinkForFileId:(NSString *)fileId 
{ 
    BoxFileBlock fileSuccess = ^(BoxFile *file) { 
      NSDictionary *fileInfo = file.rawResponseJSON; 
      if (![fileInfo[@"shared_link"] isEqual:[NSNull null]]) { 
      NSDictionary *linkData = fileInfo[@"shared_link"]; 
      //Do something with the link 
     } else { 
      // failure 
     } 
    }; 
    BoxAPIJSONFailureBlock failure = ^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSDictionary *JSONDictionary) { 
     //Handle the failure 
    }; 

    BoxFilesRequestBuilder *builder = [[BoxFilesRequestBuilder alloc] init]; 
    BoxSharedObjectBuilder *sharedBuilder = [[BoxSharedObjectBuilder alloc] init]; 
    sharedBuilder.access = BoxAPISharedObjectAccessOpen; 
    builder.sharedLink = sharedBuilder; 
    [[BoxSDK sharedSDK].filesManager editFileWithID:fileId requestBuilder:builder success:fileSuccess failure:failure]; 
} 
+0

Doskonała odpowiedź ... Bezpośredni egzemplarz wklejony do mojego projektu :) Dzięki za ... – Karun

Powiązane problemy