220

アプリでプッシュ通知サービスを使用しています。アプリがバックグラウンドにあるとき、通知画面 (iOS デバイスの上から下にスワイプしたときに表示される画面) で通知を見ることができます。ただし、アプリケーションがフォアグラウンドにある場合は、デリゲート メソッド

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo

が呼び出されていますが、通知画面に通知が表示されません。

アプリがバックグラウンドかフォアグラウンドかに関係なく、通知画面に通知を表示したい。解決策を探すのに疲れました。どんな助けでも大歓迎です。

4

18 に答える 18

238

アプリがフォアグラウンドのときにバナー メッセージを表示するには、次のメソッドを使用します。

iOS 10、スイフト 3/4 :

// This method will be called when app received push notifications in foreground
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) 
{
    completionHandler([.alert, .badge, .sound])
}

iOS 10、スウィフト 2.3 :

@available(iOS 10.0, *)
func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void)
{
    //Handle the notification
    completionHandler(
       [UNNotificationPresentationOptions.Alert,
        UNNotificationPresentationOptions.Sound,
        UNNotificationPresentationOptions.Badge])
}

また、アプリのデリゲートを通知センターのデリゲートとして登録する必要があります。

import UserNotifications

// snip!

class AppDelegate : UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate

// snip!

   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

      // set the delegate in didFinishLaunchingWithOptions
      UNUserNotificationCenter.current().delegate = self
      ...
   }
于 2016-11-23T04:44:08.153 に答える
37

興味のある方のために説明すると、上部にあるシステム プッシュ バナーのように見えるカスタム ビューを作成することになりましたが、閉じるボタン (小さな青い X) とカスタム アクションのメッセージをタップするオプションが追加されています。また、ユーザーが古い通知を読んだり破棄したりする前に、複数の通知が届いた場合もサポートします (積み上げられる通知の数に制限はありません...)。

GitHub へのリンク: AGPushNote

使用法は基本的にオンラインです。

[AGPushNoteView showWithNotificationMessage:@"John Doe sent you a message!"];

そして、iOS7 では次のようになります (iOS6 には iOS6 のルック アンド フィールがあります...)

ここに画像の説明を入力

于 2014-04-29T12:54:44.033 に答える
27

アプリケーションがフォアグラウンドで実行されている場合、iOSは通知バナー/アラートを表示しません。これは仕様によるものです。しかし、次のように使用することでそれを達成することができUILocalNotificationます


  • リモート通知を受信したときに、アプリケーションがアクティブ状態にあるかどうかを確認します。アクティブな状態の場合、UILocalNotificationを起動します。

    if (application.applicationState == UIApplicationStateActive ) {
    
        UILocalNotification *localNotification = [[UILocalNotification alloc] init];
        localNotification.userInfo = userInfo;
        localNotification.soundName = UILocalNotificationDefaultSoundName;
        localNotification.alertBody = message;
        localNotification.fireDate = [NSDate date];
        [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
    }
    

迅速:

if application.applicationState == .active {
    var localNotification = UILocalNotification()
    localNotification.userInfo = userInfo
    localNotification.soundName = UILocalNotificationDefaultSoundName
    localNotification.alertBody = message
    localNotification.fireDate = Date()
    UIApplication.shared.scheduleLocalNotification(localNotification)
}
于 2013-02-15T03:56:57.023 に答える
15

アプリケーションがフォアグラウンドで実行されている場合、iOS は通知バナー/アラートを表示しません。それは設計によるものです。アプリがフォアグラウンドにあるときに通知を受信する状況に対処するために、いくつかのコードを記述する必要があります。最も適切な方法で通知を表示する必要があります (たとえば、バッジ番号をUITabBarアイコンに追加する、通知センターのバナーをシミュレートするなど)。

于 2013-02-14T10:06:11.387 に答える
9

バナー アラートを模倣する独自の通知を作成できます。

1 つの方法は、バナーのように見え、アニメーション化してタッチに応答できるカスタム uiview を作成することです。これを念頭に置いて、より多くの機能を備えたより優れたバナーを作成できます。

または、それを行う API を探して、それらをポッドファイルとしてプロジェクトに追加することもできます。

ここに私が使用したカップルがあります:

https://github.com/terryworona/TWMessageBarManager

https://github.com/toursprung/TSMessages

于 2014-03-28T14:51:18.377 に答える
8

アプリがアクティブ状態 (フォアグラウンドまたはオープン) のときにプッシュ通知を受け取るコードを次に示します。 UNUserNotificationCenter のドキュメント

@available(iOS 10.0, *)
func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void)
{
     completionHandler([UNNotificationPresentationOptions.Alert,UNNotificationPresentationOptions.Sound,UNNotificationPresentationOptions.Badge])
}

通知使用コードの userInfo にアクセスする必要がある場合:notification.request.content.userInfo

于 2016-12-27T09:12:49.477 に答える
0

上記のように、UserNotification.frameworkこれを達成するために使用する必要があります。しかし、私の目的のために、とにかくアプリで表示する必要があり、iOS 11スタイルが必要だったので、小さなヘルパー ビューを作成しました。誰かにとって役立つかもしれません。

GitHub iOS 11 プッシュ通知ビュー

于 2018-01-30T16:34:13.250 に答える
-3

@Danial Martineが言ったように、iOSは通知バナー/アラートを表示しません。それは設計によるものです。しかし、本当にそれをしなければならない場合は、1 つの方法があります。私も同じことでこれを達成しました。

1.Parse FrameWorkからパースフレームワークをダウンロード

2.インポート#import <Parse/Parse.h>

3.次のコードを didReceiveRemoteNotification メソッドに追加します

 - (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    [PFPush handlePush:userInfo];
}

PFPush は、リモート通知の処理方法を処理します。アプリがフォアグラウンドにある場合、アラートが表示されます。それ以外の場合は、上部に通知が表示されます。

于 2013-02-14T10:20:14.620 に答える