2013-03-05 3 views
8

Wir müssen einen gemeinsamen Link für eine Datei erstellen und dann den Link so abrufen, dass wir es in unserer Anwendung anzeigen können. Wir sind in der Lage, einen gemeinsamen Link für eine bestimmte Datei zu erstellen (wir können es innerhalb Box Account im Web sehen), aber wir können sharedlink über die API nicht abrufen. Es ist immer Null, obwohl die Methode isShared YES zurückgibt.iOS BoxSDK Rückgabe Nil für SharedLink

Aus der Header-Datei von BoxObject.h finden wir, dass diese beiden Methoden erforderliche Informationen über den gemeinsamen Status des Elements bereitstellen.

@protocol BoxObject 
// ... 


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

//... 
@end 

So erstellen wir Shared Link.

  1. BoxFile finden, die wir teilen möchten, können Anruf, Foto Vor Rufmethode shareWithPassword Objekt: Nachricht: E-Mails: Rückrufe :, [photo isShared] NEIN zurückgibt.
  2. wir [photo shareWithPassword:@"" message:@"" emails:[NSArray arrayWithObject:@""] callbacks:^(id<BoxOperationCallbacks> on1){...}];
  3. innen nennen on1.after wir == BoxCallbackResponseSuccessful wenn Antwort überprüfen und dann nennen wir [Foto updateWithCallbacks:^(id on2) {..}]
  4. innerhalb on2.after wir überprüfen, ob Antwort == BoxCallbackResponseSuccessful
  5. auf erfolgreiche Antwort [photo isShared] JA zurückgibt, aber [Foto sharedLink] nIL zurück

Und wenn wir im Internet zu überprüfen, können wir diese Datei ist tatsächlich sehen freigegeben, aber wir können sharedLink vom Box SDK nicht abrufen.

Jeder hat das gleiche Problem?

+0

Es wäre hilfreich, wenn Sie den HTTP-Datenverkehr während dieses Vorgangs bereitstellen könnten. Diese Informationen helfen Ihnen, das Problem entweder auf die Daten zu beschränken, die Box Ihnen sendet, oder auf die Art und Weise, wie das iOS SDK es interpretiert. Wenn Sie an einem Mac arbeiten, können Sie ein Tool wie HTTPScoop verwenden, um den Datenverkehr zu erfassen. –

+0

Habe das schon mit Wireshark probiert. Anfragen gehen über HTTPS und ich bin mir nicht bewusst, ob es eine Möglichkeit gibt, sie über HTTP zu erzwingen. – dtrsan

+0

HTTPScoop [bietet einige Informationen] (http://www.tuffcode.com/support.html#support7), wie Sie das umgehen können. –

Antwort

0

Ich konnte den Freigabe-Link durch Aktualisieren des Ordners selbst erhalten. Dies ist der Code, den ich mir ausgedacht habe:

[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]; 
     } 
    }); 
}]; 

Dies ist mit der alten API v1. Nicht sicher, ob es sich mit der neueren Version 2 geändert hat.

0

Sie können einen gemeinsamen Link durch Bearbeiten ihrer Daten mit Box V2 erstellen:

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

Dies ist für mich zu arbeiten, basiert weg von der Code bereits gebucht und die auf Github Informationen und 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

Ausgezeichnete Antwort ... Direktkopie eingefügt in mein Projekt :) Vielen Dank ... – Karun