2016-06-29 7 views
0

GCMによるプッシュ通知が統合されています。すべて正常に動作しています。しかし、私は通知メッセージとサウンドを取得していません。関数didReceiveNotification:は、アプリケーションデリゲートで呼び出されました。また、バックグラウンドの状態になっていない。iosのGCMでプッシュ通知がバックグラウンド状態にならない

+0

あなたがSOにポストにつながる問題がある場合、すべてが正常に動作している方法は? – Avi

+0

私はこの権利を得ているかどうかわかりませんが、アプリがフォアグラウンドになっている場合にのみ、「アプリケーション代理人の通知を受け取りました」が発生します。あなたが通知を受け取らないなら、100の理由があるかもしれません。私はGCM/APNSのログを取得し始めるでしょう、彼らはそれが送信されたと言いますか? – dan

答えて

0

通常、iOSアプリはAPNSではなくGCMでプッシュ通知を受け取ることができ、アプリがバックグラウンド状態のときはデータを取得できませんでした。 iOSアプリがAPNSでプッシュ通知を取得し、バックグラウンド状態になっている場合、プッシュ通知は通知センター&のアプリのアイコンで一番上に表示されます。通知が表示されても、サーバーに問題はありません。

アプリがバックグラウンド状態になってもデータが届かないため、アプリがフォアグラウンド状態に戻ったときに通知データ用にサーバーAPIを作成する必要があります。

0

コメントを投稿する前に、以下のことを検討してください。

  1. 私はApple Developer center
  2. を訪問していない場合は、Appleデベロッパポータルから必要な暫定プロフィール&証明書を生成している、あなたが開発者向けポータルでアプリケーション識別子を設定していると仮定します。訪問しない場合App Distribution Guide
  3. bundle identifierがApple Developer Portalで定義されているとおりに正しく設定されていることを確認してください。
  4. カスタムバックエンドを使用してAPNSを設定し、FireBase/GCM用ではないプッシュ通知を送信するためのアンサーガイドです。 didFinishLaunchingWithOptionsAppDelegate内部のファイルに適切な設定で

    Step 1: APNSのための登録

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
        // Override point for customization after application launch. 
    
        let notificationTypes: UIUserNotificationType = [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound] 
        let pushNotificationSettings = UIUserNotificationSettings(forTypes: notificationTypes, categories: nil) 
    
        application.registerUserNotificationSettings(pushNotificationSettings) 
        application.registerForRemoteNotifications() 
    
        return true 
    } 
    

    Step 2:追加する:上記のすべてのものが正しく設定されている場合、下記の手順Firebase or GCM(As Firebase Cloud Messaging (FCM) is the new version of GCM) follow Google documentation

を使用して、それを設定するにはdelegatedelegateメソッドを追加してAPNS登録の成功または失敗を処理する方法

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 

    // Convert binary Device Token to a String (and remove the <,> and white space charaters). 
    var deviceTokenStr = deviceToken.description.stringByReplacingOccurrencesOfString(">", withString: "", options: nil, range: nil) 
    deviceTokenStr = deviceTokenStr.stringByReplacingOccurrencesOfString("<", withString: "", options: nil, range: nil) 
    deviceTokenStr = deviceTokenStr.stringByReplacingOccurrencesOfString(" ", withString: "", options: nil, range: nil) 
    print(deviceTokenStr); 

    // *** Store device token in your backend server to send Push Notification *** 
} 

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { 
    print(error) 
} 

Step 3:今、あなたは、デバイスの端にあなたのAPNSを設定している、あなたは、あなたのアプリがフォアグラウンドにあるときにメソッドが呼び出されます、次のプッシュ通知を受信した場合、サーバー/バックエンドからのプッシュ通知を発射することができます。それをAppDelegateに実装します。

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 
    print(userInfo) 
} 

あなたは物事を次の世話をする必要があなたのapplication is in background(ただし、マルチタスクから削除することによって殺されていない)しながら、プッシュ通知を処理するために。

あなたは> Targets-> Capabilities->バックグラウンドモードをオンにして、リモート通知を選択し、プロジェクトNavigation-でBackground Modesを有効にしていることを確認してください。

バックグラウンドでプッシュ通知を処理する次の方法を実装します。 UIBackgroundFetchResultを正しく処理してください。

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

} 

注: メソッドが呼び出されることはありませんfunc application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject])メソッドを実装している場合。

読むよりおよそAPNS in Apple Documentation.

関連する問題