我正在尝试使用Cocoa(Mac)和PubSub框架获取我的Gmail未读电子邮件数量。我看过一个或两个显示使用PubSub和Gmail的链接,这是我目前为止的代码。
PSClient *client = [PSClient applicationClient];
NSURL *url = [NSURL URLWithString:@"https://mail.google.com/mail/feed/atom/inbox"];
PSFeed *feed = [client addFeedWithURL:url];
[feed setLogin: @"myemailhere"];
[feed setPassword: @"mypasswordhere"];
NSLog(@"Error: %@", feed.lastError);
任何人都知道我怎么能得到未读数?
谢谢:)
答案 0 :(得分:3)
你有两个问题:一个有解决方案,一个似乎是一个永久性的问题。
第一个:Feed刷新是异步发生的。因此,您需要收听PSFeedRefreshingNotification和PSFeedEntriesChangedNotification通知,以查看Feed何时刷新和更新。通知的对象将是有问题的PSFeed。
举个例子:
-(void)feedRefreshing:(NSNotification*)n
{
PSFeed *f = [n object];
NSLog(@"Is Refreshing: %@", [f isRefreshing] ? @"Yes" : @"No");
NSLog(@"Feed: %@", f);
NSLog(@"XML: %@", [f XMLRepresentation]);
NSLog(@"Last Error: %@", [f lastError]);
if(![f isRefreshing])
{
NSInteger emailCount = 0;
NSEnumerator *e = [f entryEnumeratorSortedBy:nil];
id entry = nil;
while(entry = [e nextObject])
{
emailCount++;
NSLog(@"Entry: %@", entry);
}
NSLog(@"Email Count: %ld", emailCount);
}
}
-(void)feedUpdated:(NSNotification*)n
{
NSLog(@"Updated");
}
-(void)pubSubTest
{
PSClient *client = [PSClient applicationClient];
NSURL *url = [NSURL URLWithString:@"https://mail.google.com/mail/feed/atom/inbox"];
PSFeed *feed = [client addFeedWithURL:url];
[feed setLogin: @"correctUserName@gmail.com"];
[feed setPassword: @"correctPassword"];
NSError *error = nil;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(feedUpdated:) name:PSFeedEntriesChangedNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(feedRefreshing:) name:PSFeedRefreshingNotification object:nil];
[feed refresh:&error];
if(error)
NSLog(@"Error: %@", error);
}
第二个(也是更糟糕的)问题是PubSub无法正确处理经过身份验证的Feed。我在http://www.dizzey.com/development/fetching-emails-from-gmail-using-cocoa/看到了这个,我在自己的系统上重现了同样的行为。我不知道这个bug是否特定于10.7或者它是否影响以前版本的OS X.
“解决方法”是使用NSURLConnection执行原始订阅源XML的经过身份验证的检索。然后,您可以使用其initWithData:URL:方法将其推送到PSFeed中。这个非常严重的缺点是你实际上不再是PubSubing了。您必须运行计时器并在适当时手动刷新Feed。
我能帮到你的最好方法是提交一个错误:rdar:// problem / 10475065(OpenRadar:1430409)。
您应该提交一个重复的错误,以尝试增加Apple修复它的机会。
祝你好运。