Evernote iOS SDK - 如何使用令牌进行身份验证?

Evernote iOS SDK - How do I authenticate with a token?

我正在为 iOS 使用 Evernote SDK,并且在用户授权访问时保存身份验证令牌。

一旦用户在不同的设备上安装了我的应用程序,我想使用该令牌自动重新进行身份验证,但 SDK 似乎不支持。有办法吗?

上周我遇到了同样的问题,他们的 SDK 确实不支持开箱即用,但经过一番研究,我找到了一个完美的解决方案。此解决方案模仿有效的身份验证流程。

一点背景知识:

ENSession class 初始化时,它会检索保存在钥匙串上的凭据(除非之前调用了 [[ENSession sharedSession] unauthenticate])。问题是当使用不同的设备时钥匙串是空的,所以我们的目标是添加一个有效的 ENCredentials 实例到 ENCredentialStore.

解法:

  1. 将以下导入添加到您的代码中:ENCredentials.hENCredentialStore.h。我们稍后会需要它们。

  2. 像你已经做的那样初始化ENSession,使用setSharedSessionConsumerKey:(NSString *)key consumerSecret:(NSString *)secret optionalHost:(NSString *)host

  3. 为了创建有效的ENCredentials对象,我们需要提供以下对象:

    • NSString *主机
    • NSString * edamUserId
    • NSString * noteStoreUrl
    • NSString * webApiUrlPrefix
    • NSString * authenticationToken
    • NSDate * 到期日期

    host 始终是 www.evernote.com(如 ENSessionBootstrapServerBaseURLStringUS 下的 ENSession 中所定义)。

    edamUserId是你拿到原始token时收到的user id。 expirationDate 也一样。如果您不确定如何获得它们,那么您应该在通过身份验证后使用 [[ENSession sharedSession].userStore getUserWithSuccess:^(EDAMUser *user)

    所以真正缺少的对象只有 noteStoreUrlwebApiUrlPrefix。它们的格式始终是:

    • noteStoreUrl: https://www.evernote.com/shard/edam_shard/notestore
    • webApiUrlPrefix: https://www.evernote.com/shard/edam_shard/

    幸运的是,您的令牌已经包含 edam_shared([=39= 的值],请参阅 this):

    @"S=s161:U=5ce3f20:E=1561182201b:C=24eb9d000f8:P=285:A=app:V=2:H=e8ebf56eac26aaacdef2f3caed0bc309"

    如果您提取 s161 并将其放入上面的 URL 中,它将起作用(我相信您知道如何提取它,但如果您遇到问题请告诉我)。

现在我们已准备好使用令牌进行身份验证。首先,使用类别从 ENSession 公开必要的功能:

@interface ENSession(Authentication)

- (void)startup;

- (void)addCredentials:(ENCredentials *)credentials;

@end

并使用令牌进行身份验证:

ENCredentials *credentials = [[ENCredentials alloc] initWithHost:ENSessionBootstrapServerBaseURLStringUS edamUserId:userId noteStoreUrl:noteStoreUrl webApiUrlPrefix:webApiUrlPrefix authenticationToken:token expirationDate:expirationDate];
[[ENSession sharedSession] addCredentials:credentials];
[[ENSession sharedSession] startup];

为了刷新 ENSession 和检索新存储的凭据,最后一行很重要。

现在您已通过身份验证并可以查询SDK。祝你好运。