PubSubを使用してGmailの未読数を取得する

私はGmailの未読メール数をCocoa(Mac)とPubSubフレームワークで取得しようとしています。私はPubSubとGmailを使って1つか2つのリンクを見てきましたが、これまで私のコードがあります。

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);

誰も私が未読のカウントを得る方法を知っていますか?

ありがとう:)

1

1 答え

あなたには2つの問題があります:1つは解決策があり、もう1つは永続的な問題です。

1つ目は、フィードのリフレッシュが非同期的に行われることです。フィードがリフレッシュされて更新されるタイミングを確認するには、PSFeedRefreshingNotificationとPSFeedEntriesChangedNotificationの通知を聞く必要があります。通知オブジェクトは問題の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: @"[email protected]"];
    [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);
}

2番目の(そしてさらに悪い)問題は、PubSubが認証されたフィードを正しく処理しないことです。私はこれを http://www.dizzey.com/で見ましたgmailからの電子メールの開発/取得 - ココア/ と私自身のシステムで同じ振る舞いを再現しました。このバグが10.7に該当するのか、以前のバージョンのOS Xに影響するのか分かりません。

"回避策"は、NSURLConnectionを使用して、生のフィードXMLの認証取得を実行することです。 initWithData:URL:メソッドを使用して、PSFeedにそれを押し込むことができます。これの非常に深刻な欠点は、あなたが実際にはPubSubingではないことです。タイマーを実行し、必要に応じて手動でフィードを更新する必要があります。

私があなたを助けるためにできることは、バグを報告することでした:rdar:// problem/10475065(OpenRadar: 1430409 )。

おそらく、Appleがそれを修正する可能性を高めるために、重複したバグを提出するべきです。

がんばろう。

3
追加された
あなたの助けとあなたの答えをありがとう。私は重複したバグを提出しました。
追加された 著者 Seb Jachec,