web-dev-qa-db-ja.com

デスクトップでプッシュ通知を読んだ場合、Facebook Messengerはどのようにしてロック画面からプッシュ通知をクリアしますか?

Facebookでメッセージを受信すると、ロック画面(iOS)にプッシュ通知が表示されます。次に、このメッセージをデスクトップで読みました。その直後、このプッシュ通知は電話との対話なしで消えます。古い通知を削除するために同じことを自分で実装するにはどうすればよいですか?

2番目の使用法は、通知をつなぎ合わせることです。たとえば、Instagramは、誰かがあなたの写真を気に入ったときにプッシュを送信します。 20のいいねをすると、通知画面が台無しになり、判読できなくなります。しかし、Facebookと同じプリンシパルを使用すると、同じ種類の以前の通知を削除し、増加したカウンターで新しいものを作成することが可能であるように思われます。 「ユーザーAは写真Xが好き、ユーザーBは写真Yが好き」などではなく、「20人のユーザーが写真Zが好き」ではありません。

私はここで同様のトピックに関するいくつかのトレッドを見てきましたが、それでも今のところ答えはありません。ありがとう!

35
Alex

マルチタスクの機能強化 および特にサイレントプッシュ通知を参照してください。サイレントプッシュを使用すると、新しいコンテンツが利用可能であることをアプリに通知したり、そのコンテンツをダウンロードしたり、通知センターに通知を表示せずにバッジ番号を設定したりできます。これを機能させるには、リモート通知値を使用してUIBackgroundModesを設定する必要があります。

ユーザーが別のプラットフォームでコンテンツを見た場合はサイレントプッシュを送信し、iOSアプリでバッジ番号をクリアできます。

22
Ivan Genchev

この効果を実現する簡単な方法の1つは、バッジ数が0のみのペイロードを使用して通常のプッシュ通知をデバイスに送信することです。

Facebookの例では、デスクトップでメッセージを読んだことを検出し、デバイスにプッシュを送信して通知が表示されなくなったことを確認するのに十分なサーバーパワーを備えていることは明らかです。

これがFBのやり方だと言っているのではありませんが、それはあなたのニーズに合うかもしれないし、合わないかもしれないより単純な道です。バックグラウンドタスクはユーザーのバッテリーを大幅に消費するため、可能な限り避ける必要があることに注意してください。

4
Nick

これは、マルチタスク機能であるサイレントプッシュ通知と呼ばれるiOS7の新機能です。

必要なもの:

1-didFinishLaunchingWithOptionsでリモート通知に登録します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
     (UIRemoteNotificationTypeNewsstandContentAvailability|
      UIRemoteNotificationTypeBadge |
      UIRemoteNotificationTypeSound |
      UIRemoteNotificationTypeAlert)];

}

2-ApplicationDelegateに次のメソッドを実装します。

   - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
      handler(UIBackgroundFetchResultNewData);


    // Possibl Results:
//    typedef enum {
//        UIBackgroundFetchResultNewData, //Download success with new data
//        UIBackgroundFetchResultNoData,  //No data to download
//        UIBackgroundFetchResultFailed   //Downlod Failed
//    } UIBackgroundFetchResult;
}

3-アプリケーションinfo.plist内にUIBackgroundModesを設定します。

> <key>UIBackgroundModes</key> <array>
>     <string>remote-notification</string> </array>
3
alexandresoli

警告:私はこれを試していません、それはただのアイデアです!

IOS 7では、サイレントな「コンテンツ利用可能」通知をユーザーに送信してみることができます。これにより、アプリがバックグラウンドでウェイクアップし、コードを実行できるようになります。バックグラウンドであなたはそれからすることができます

[[UIApplication sharedApplication] setApplicationBadgeNumber:0];
[[UIApplication sharedApplication] setApplicationBadgeNumber:newBadgeNumber];

これにより、通知センターにある通知がすべてクリアされます。次に、userInfoディクショナリで取得したデータを使用してローカル通知を投稿すると、古い通知が新しい通知に置き換えられたように見えます。

繰り返しますが、ただのアイデア...

2
George Green