2016-05-06 4 views
1

Я пытаюсь получить доступ к совместно используемому ноутбуку с помощью Evernote Android SDK. Я получаю shareKey через REST api с серверной части приложения. Я использую этот код:Evernote SDK: аутентифицировать общий ноутбук

AuthenticationResult result = EvernoteSession.getInstance() 
        .getEvernoteClientFactory() 
        .getNoteStoreClient() 
        .authenticateToSharedNotebook(shareKey); 
      String token = result.getAuthenticationToken(); 
      String sharedNotebookStoreUrl = result.getNoteStoreUrl(); 
      TBinaryProtocol sharedNoteProtocol = new TBinaryProtocol(
        new THttpClient(sharedNotebookStoreUrl)); 
      NoteStore.Client sharedNoteStore = new NoteStore.Client(sharedNoteProtocol); 
      SharedNotebook sharedNotebook = sharedNoteStore.getSharedNotebookByAuth(token); 

Но когда я называю

AuthenticationResult result = EvernoteSession.getInstance() 
         .getEvernoteClientFactory() 
         .getNoteStoreClient() 
         .authenticateToSharedNotebook(shareKey); 

это trows исключение

EDAMNotFoundException(identifier:SharedNotebook.id, key:39116) 

Что я делаю неправильно? Как я могу согласиться на совместное использование и доступ к содержимому общего ноутбука?

ответ

0

Вы используете неправильный код sharedNotebookStoreUrl.

A SharedNotebook - это запись доли Notebook N со счета А на счет Б. Она хранится в счете noteStoreUrl счета А (блокнот N). У учетной записи B будет соответствующая запись LinkedNotebook, которая указывает на SharedNotebook (а не на ноутбук). LinkedNotebook будет на счет Б.

NoteStoreUrl for account A   NoteStoreUrl for account B 
Notebook N       LinkedNotebook L (points to S) 
SharedNotebook S (points to N) 

Похоже, вы в счете B и пытаетесь получить доступ к портативным N. То, что вы хотите сделать, это принести noteStoreUrl из LinkedNotebook L, а затем использовать его для вызова authenticateToSharedNotebook. Вы можете получить LinkedNotebooks, позвонив listLinkedNotebooks.

+0

Когда учетная запись A создает SharedNotebook с accout B, учетная запись B не будет иметь соответствующий LinkedNotebook, пока не примет долю. Как я могу принять долю, используя Evernote SDK? –

+0

Я не думаю, что мы предоставляем эту функциональность клиентам. Вы можете присоединяться только к совместно используемому ноутбуку, если он поделился рабочим чатом или пользователь (присоединяется) нажимает ссылку в письме, отправленном в результате вызова NoteStore # shareNotebook. EDIT не похож, что вызов shareNotebook документирован онлайн - некоторые из SDK могут иметь его, в зависимости от того, насколько они актуальны. – akhaku

0

Не уверен, если это будет работать в вашем точном сценарии, но вы можете попробовать следующее, чтобы создать Linked Notebook в учетной записи пользователя B (я сделать что-то похожее на это в несколько иной сценарий):

LinkedNotebook linkedNotebook = new LinkedNotebook(); 
linkedNotebook.SharedNotebookGlobalId = <the shareKey you got from the server> 
linkedNotebook.ShareName = <the name of the Shared Notebook> 
linkedNotebook.Username = <the username of user A; i.e. the owner of the Shared Notebook> 
linkedNotebook.ShardId = <the shardId of the notebook in user A's account> 
LinkedNotebook createdLinkedNotebook = noteStore.createLinkedNotebook(authenticationToken, linkedNotebook); 
Смежные вопросы