2016-07-21 8 views
1

Ich arbeite mit der Evernote API versuchen, verknüpfte Notebooks aus unserer Webanwendung zu machen.Erstellen von LinkedNotebooks aus API

Wir verwenden evernote-sdk-js-Version der API.

Wir sind in der Lage, das freigegebene Notebook von der API zu erstellen. Außerdem können wir ein Linked Notebook erstellen und eine gültige Antwort erhalten. Das Problem ist, dass das verbundene Notebook nicht funktioniert. Das Notebook wird im ListLinkedNotebook API-Anruf zurückgegeben, aber wenn ich versuche, es zu autorisieren, erhalte ich einen Fehler.

Error { identifier: 'SharedNotebook.id', key: 'xxxx' } 

Von was ich gelesen habe bedeutet, dass das Notebook nicht mehr vom Besitzer geteilt wird. Dies ist nicht der Fall, da das Konto des Besitzers die ausstehende Anfrage weiterhin im Fenster "Freigabe" anzeigt.

Hier ist der logische Fluss:

1) Der Benutzer gibt E-Mail-Adresse der Person, sie wollen mit Notebook teilen. Es wird eine Anfrage an unseren Server gestellt, um ein ShareNotebook zu erstellen.

Wir schaffen eine Geteilt Notebook wie folgt aus: (von Owner Konto)

var notebook = new Evernote.SharedNotebook(); 
    notebook.notebookGuid = guid; 
    notebook.email = email; 
    notebook.privilege = Evernote.SharedNotebookPrivilegeLevel.FULL_ACCESS; 

    var userclient = new Evernote.Client({token: token, sandbox: sandbox}); 
    var notestore = userclient.getNoteStore(); 
    notestore.createSharedNotebook(userclient.token, notebook, function(err, results){ 
     callback(err, results); 
    }); 

mit einem Beispiel Antwort wie:

{ 
allowPreview:null 
email:"[email protected]" 
id:12345 
notebookGuid:"d2fa3cbe-...." 
notebookModifiable:false 
privilege:4 
recipientSettings:null 
requireLogin:null 
serviceCreated:1469079222000 
serviceUpdated:1469079222000 
shareKey:"xxxx-sxxx" 
userId:999xxxxx 
username:null 
} 

2) Da Evernote keine E-Mail von der API schickt Bitte senden Sie dem Benutzer manuell einen Link, um das freigegebene Notebook zu aktivieren.

-Code LinkedNotebook zu erstellen: (von Gemeinschafts-Benutzerkonto)

var notebook = new Evernote.LinkedNotebook; 
    notebook.shareName = options.shareName; 
    notebook.username = options.username; 
    notebook.shardId = options.shardId; 
    notebook.shareKey = options.shareKey; 

    var userclient = new Evernote.Client({token: token, sandbox: sandbox}); 
    var notestore = userclient.getNoteStore(); 
    notestore.createLinkedNotebook(userclient.token, notebook, function(err, results){ 
     callback(err, results); 
    }); 

Und das Beispiel Antwort:

{ 
shareName: 'Notebook Name', 
username: '...', 
shardId: 'sxxx', 
shareKey: 'xxxx-sxxx', 
uri: null, 
guid: '4f8df3c2-...', 
updateSequenceNum: 630, 
noteStoreUrl: 'https://www.evernote.com/shard/sxxx/notestore', 
webApiUrlPrefix: 'https://www.evernote.com/shard/sxxx/', 
stack: null, 
businessId: null 
} 

jemand eine verlinkte Notebook von der API kein Glück gehabt zu schaffen hat? Es scheint, dass der Aufruf der createLinkedNotebook-API nicht korrekt funktioniert. Danke für Ihre Hilfe.

Antwort

2

tl; dr Sie können nicht tun, was Sie gerade versuchen, tut mir leid.

Es fehlen also ein paar Stücke, nicht etwas, worüber man viel machen kann.

Das erste Stück ist, dass das freigegebene Notebook von einem Benutzer (dem Empfänger) "beansprucht" werden muss, während dem es dem Benutzer zugewiesen wird. Bis es behauptet wird, gibt ein LinkedNotebook, das auf das SharedNotebook verweist, nicht wirklich Zugriff auf das zugrunde liegende Notebook - authenticateToSharedNotebook schlägt fehl.

Das zweite Stück ist der shareKey selbst. Wir haben das Strukturelement, das Sie sehen, als shareKey in das SharedNotebook und sharedNotebookGlobalId im LinkedNotebook in globalId umbenannt. Wir aktualisieren gerade unsere Entwicklerdokumentation und aktualisieren dann die SDKs. Um ein sharedNotebook zu "beanspruchen", muss der Empfänger authenticateToSharedNotebook mit dem shareKey aufrufen, nicht mit globalId. Der Haken dabei ist, dass wir keine Methode zum Generieren des echten shareKey verfügbar machen. Daher können Drittanbieter-Clients diese Methode nicht erstellen und dem freigegebenen Notizbuch beitreten. Sobald es ist beansprucht, können Sie authenticateToSharedNotebook mit der globalId aufrufen, um Zugriff auf das Notebook zu erhalten.

Wir haben eine shareNotebook Methode hinzugefügt, die eine E-Mail als Teil des API-Aufrufs sendet. Diese E-Mail enthält einen Link, auf den der Benutzer klicken kann, der den shareKey enthält, und ermöglicht die Beanspruchung eines SharedNotebooks, das sich jedoch derzeit nicht in den SDKs befindet oder nicht dokumentiert ist. Wir werden es hoffentlich mit dieser Runde von Doc-Updates aufnehmen.

+0

Danke für die Info. Es wäre schön, neben diesen api-Anrufen eine Nachricht zu haben, einfach "3rd party apps können diesen api-Anruf im Moment nicht nutzen". –

+0

Welcher Anruf speziell? _Technisch_ Sie können alle Anrufe verwenden, z. B. können Sie ein LinkedNotebook mit einem beliebigen SharedNotebook erstellen, einschließlich eines SharedNotebooks, das Ihnen bereits zugewiesen ist. Ich stimme zu, dass es nicht sehr nützlich ist, hoffe aber, das bald zu ändern! – akhaku

+0

Ein anderer API-Aufruf, den wir nutzen wollten, war "sendMessageToSharedNotebookMembers", aber auch das scheint begrenzt zu sein oder funktioniert nicht von 3rd Party API. Wie auch immer, ich freue mich darauf, die neuen Funktionen zu testen, wenn die SDKs und Dokumente aktualisiert werden. –