I'm trying to gain access to shared notebook using Evernote Android SDK. I'm receiving shareKey via REST api from server side of the applicaiton. I'm using the code below:
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);
But when I call
AuthenticationResult result = EvernoteSession.getInstance()
.getEvernoteClientFactory()
.getNoteStoreClient()
.authenticateToSharedNotebook(shareKey);
it trows an exception
EDAMNotFoundException(identifier:SharedNotebook.id, key:39116)
What I am doing wrong? How I can accept sharing and access to shared notebook's content?
You're using the wrong
sharedNotebookStoreUrl
.A
SharedNotebook
is the record of a share of aNotebook
N from account A to account B. It is stored in thenoteStoreUrl
of account A (notebook N). Account B will have a correspondingLinkedNotebook
record that points to the SharedNotebook (not the notebook). TheLinkedNotebook
will be on account B.Sounds like you're in account B and trying to access the Notebook N. What you want to do is fetch the noteStoreUrl from the LinkedNotebook L and then use that to call
authenticateToSharedNotebook
. You can fetch the LinkedNotebooks by calling listLinkedNotebooks.Not sure if this will work in your exact scenario, but you can try the following to create the Linked Notebook in User B's account (I do something similar to this in a slightly different scenario):