2017-04-18 137 views
1

这是我发送的json,但我只在IOS的前台接收通知,但不在后台。我在IOS上没有在后台接收fcm推送通知

remoteMessage.appData {          colorCode = XXXXX;         description = "XXXXX";     from = XXXXX;     notification =     {         body = "XXXXX";         e=1;     };     notificationName = "XXXXX";     notificationType = XXXXX;     outbid = XXXXX;     paused = XXXXX;     sound = "XXXXX.wav";     suspended = XXXXX; } 

这里是我使用产生上述JSON PHP的代码:

公共函数sendPushNotification($ registration_ids,数组$通知,数组$消息= NULL){

 $url = 'https://fcm.googleapis.com/fcm/send'; 
    $notification['notification']['sound'] = $this->_notificationSoundFile; 
    $fields = array(
     'registration_ids' => array($registration_ids), 
     'notification' => $notification['notification'], 
     'data' => $message['message'] 
    ); 
    $headers = array(
     'Authorization:key=' . $this->_fcmKey, 
     'Content-Type: application/json' 
    ); 


    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); 

    $result = curl_exec($ch); 


    if ($result === false) 
     throw new Exception('Curl failed ' . curl_error()); 

    curl_close($ch); 
    if ($result) { 
     return json_decode($result, true)['success'] == true ? true : false; 
    } 
} : 

    enter code here 

Expected Output : 

{ 
    aps =     { 
        alert =         { 
            body = "XXXX"; 
            title = ""; 
        };         
        sound = "XXXX.wav"; 
    }; 
    "gcm.message_id" = "XXXX"; 
    "gcm.notification.appointmentId" = XXXX; 
    "gcm.notification.carCode" = XXXX; 
    "gcm.notification.deal_lost" = XXXX; 
    "gcm.notification.dealerCode" = XXXX; 
    "gcm.notification.notificationName" = "XXXX"; 
    "gcm.notification.notificationType" = XXXX; 
    "gcm.notification.outbid" = XXXX; 
    "gcm.notification.paused" = XXXX; 
    "gcm.notification.suspended" = XXXX; 
} 

Help appreciated. 
+0

是你能够在你的应用程序在后台模式 –

+0

是已启用 –

回答

1

In notification = {alert:“”}

警报应该在那里。还有一件事backgroundfetch处理方法在你的appdelegate类中实现。

FUNC应用(_应用:UIApplication的,didReceiveRemoteNotification USERINFO:[AnyHashable:任何],fetchCompletionHandler completionHandler:@escaping(UIBackgroundFetchResult) - >空隙){

} 希望它将工作。

1

我已经实现以下应用程序中的委托方法的目标C

德尼亚内什沃Wakchaure

- (void)applicationReceivedRemoteMessage:(FIRMessagingRemoteMessage *)remoteMessage { 
} 
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification 
     withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler { 
} 
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response 
     withCompletionHandler:(void (^)())completionHandler { 
} 
- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
} 
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { 
} 
2

您应检查content_available标签。这是Apple自动转换为aps-> alert的标准FCM有效载荷(用于后台通知处理)。

{ 
    "notification" : { 
     "title": "XXX", 
     "body" : "xxx", 
     "title": "xxx", 
     "content_available": 1 
    }, 
    "data" : { 
     //contain the payload 
    } 
} 

只是为了更多参考:FCM guidelines to send notification