3

はじめ

を実行していないとき、私はどのようにFCM/GCM作品とどのように迅速なアプリケーションハンドル受信の基本的な理解を持っており、これらのプッシュ通知に取り扱いアプリが

問題をお送り表示されます

アプリがフォアグラウンドにあるとき、私はバナーとして表示する通知を選択できるコードを作成しました。

私はAppDelegateその後、私は3迅速

ため NSUserDefaults SWIFT 2.3または UserDefaults内部に置くシステムデフォルトでプッシュ通知をフィルタリングします

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) 

の内側に、この関数の中にコードを配置します

私はこのように見える簡単なクラスを用意しています

class Persistence { 
    static let defaults = NSUserDefaults . .... 
    static var doShowMessageNotification:Bool { 
     get { 
      return defaults.get ... 
     } 
     set(value) { 
      defaults.set ... 
     } 
    } 
} 

// you get the idea 

アプリケーションの状態が

func doThis() { 
    switch UIApplication.sharedApplication().applicationState { 
    case .Active: 
     // do some stuff here 
    case .Inactive, .Background: 
     // do some stuff here  
    } 
} 

これは、アプリが動作しているときに完璧に動作またはスタンバイではなく時にアプリは動作しませんであれば、私はチェックします

switch Persistence.doShowMessageNotification { 
case true: 
    doThis() 
case false: 
    break //do nothing in short 
} 

内部再び

終了/シャットダウンします。

API /サーバーコードを変更せずにこれが動作することはありますか?

+0

アプリが強制終了された場合は不可能です。 http://stackoverflow.com/a/26587688/4539192 – Rikh

+0

私は、どのプッシュ通知を表示するかを選択し、どのプッシュ通知でアクションを処理するのかを選択したいと考えています。私の英語を赦してください 私の理解では、これを行う方法は本当にありません。私は本当にAPI /サーバーコードで遊ぶべきですか? –

+1

これは正しいです。あなたのアプリが実行されていない場合、通知はiOSによって処理され、あなたのアプリは – Paulw11

答えて

1

技術的に不可能です。このコードは、実行していないときには実行できません。あなたのアプリがアクティブでないときに通知を隠すことはできません。サーバーコードからこれを処理するしか方法はありません。

サーバーコードからこれを行うことは実際にはできません。Notification content Extension.からNotification content extensionを使用すると、通知で表示するコンテンツを処理できます。ここから特定の通知を表示したくない場合は、コンテンツをデフォルトのメッセージに変更することができます。
拡張機能のplistでは、UNNotificationExtensionDefaultContentHiddenをfalseに設定します。これにより、サーバーから受信した既定の通知テキストが非表示になり、必要なコンテンツを表示できるビューが表示されます。

NotificationViewController.swiftファイルのdidReceiveメソッドで通知の詳細を取得できます。

@IBOutlet var titleLabel: UILabel? 
@IBOutlet var subtitleLabel: UILabel? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any required interface initialization here. 
} 

func didReceive(_ notification: UNNotification) { 
    if(requiredtoDisplay) 
    { 
    titleLabel?.text = notification.request.content.title 
    subtitleLabel?.text = notification.request.content.subtitle 
} 
else 
{ 
    titleLabel?.text = "default text" 
    subtitleLabel?.text = "default tex" //or call api to update device token with "" , if you don't want to receive further notification after this 
} 
} 
+0

と呼ばれることはありません。私は自分の情報を編集することができません。私のアプリの "設定"部分を作成する場合は、plist原因は読み取り専用です。私はServerのコーディングは本当に方法だと思います。 –