0

Я пытаюсь отправить уведомления толчка с ТСМ между отдельными устройствами с помощью Node.js сервера и Swift2,2 (на основе Франк ван Puffelen-х Sending notifications between Android devices with Firebase Database and Cloud Messaging).Firebase Cloud Messaging с Node.js сервера

запрос Уведомления успешно обрабатываются оба Firebase базы данных и сервер Node.js (добавление запроса в базу данных, извлекаются данные из базы данных, отправки уведомлений на тему), но я не получаю предупреждения на моем устройстве ,

Когда я запускаю приложение, вызывается func application(application: UIApplication, didReceiveRemoteNotification), и я могу распечатать уведомление, но, по сравнению с отправкой уведомления через интерфейс Firebase, к сожалению, нет оповещения.

userInfo от уведомления Node.js (Нет оповещения):

[aps: { 
alert =  { 
title = "This should be the text"; 
}; 
}, gcm.message_id: 0:1475766502047698%d4d04c12d4d04c12] 

userInfo от отправки уведомления через интерфейс Firebase (в оповещения работает):

[gcm.notification.sound2: default, google.c.a.e: 1, aps: { 
alert = This should be the text; 
sound = default; 
}, gcm.n.e: 1, google.c.a.c_id: ##Some Id###, google.c.a.udt: 0, gcm.message_id: 0:1475766412557820%d4d04c12d4d04c12, google.c.a.ts: ##Some Id 2##] 

index.js:

var express = require('express'); 
var firebase = require("firebase"); 
var request = require('request'); 
var app = express(); 
var path = require("path"); 
var API_KEY = "Some Key"; // Your Firebase Cloud Server API key 

app.set('port', (process.env.PORT || 5000)); 

app.use(express.static(__dirname + '/public')); 

// views is directory for all template files 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'ejs'); 

app.get('/', function(request, response) { 
response.render('pages/index') 
}); 

app.listen(app.get('port'), function() { 
console.log('Node app is running on port', app.get('port')); 
}); 

firebase.initializeApp({ 
serviceAccount: path.resolve(__dirname, './credentials/someCredentials.json'), 
databaseURL: "https://someURL.firebaseio.com" 
}); 

ref = firebase.database().ref(); 

function listenForNotificationRequests() { 
var requests = ref.child('notificationRequests'); 
requests.on('child_added', function(requestSnapshot) { 
var request = requestSnapshot.val(); 
sendNotificationToUser(
request.username, 
request.message, 
function() { 
requestSnapshot.ref.remove(); 
} 
); 
}, function(error) { 
console.error(error); 
}); 
}; 

function sendNotificationToUser(username, message, onSuccess) { 
request({ 
url: 'https://fcm.googleapis.com/fcm/send', 
method: 'POST', 
headers: { 
'Content-Type' :' application/json', 
'Authorization': 'key='+API_KEY 
}, 
body: JSON.stringify({ 
notification: { 
title: message 
}, 
to : '/topics/user_'+username 
}) 
}, function(error, response, body) { 
if (error) { console.error(error); } 
else if (response.statusCode >= 400) { 
console.error('HTTP Error: '+response.statusCode+' - '+response.statusMessage); 
} 
else { 
onSuccess(); 
} 
}); 
} 

// start listening 
listenForNotificationRequests(); 

Я был бы очень признателен, если кто-то может помочь мне с этим :)

ответ

1

Найдено ответ: я должен был изменить функцию sendNotificationToUser, заменив title на body в моем notification объекта и установить priority высокий.

function sendNotificationToUser(username, message, onSuccess) { 
    request({ 
    url: 'https://fcm.googleapis.com/fcm/send', 
    method: 'POST', 
    headers: { 
     'Content-Type' :' application/json', 
     'Authorization': 'key='+API_KEY 
    }, 
    body: JSON.stringify({ 
    notification: { 
    body: message, // Send your message in 'body' 
    sound: 'default' 
    }, 
    to : '/topics/user_'+username, 
    priority: 'high' // Set the priority to high 
    }) 
    }, function(error, response, body) { 
     if (error) { console.error(error); } 
     else if (response.statusCode >= 400) { 
     console.error('HTTP Error: '+response.statusCode+' - '+response.statusMessage); 
     } 
     else { 
     onSuccess(); 
     } 
    }); 
} 
Смежные вопросы