请考虑以下问题:
我正在使用以下插件为Xamarin执行推送通知,我试图让它在iOS和Androids上运行。
https://github.com/CrossGeeks/FirebasePushNotificationPlugin
我还使用以下PHP代码从网站向设备发送推送通知。
$fields = array
(
'to' => $ID->notification_token,
"content_available" => true,
'priority'=>10,
'notification' => array('title' => 'You have a new message', 'body' => 'Hooray', 'sound'=>'default', 'vibration'=>'default'),
);
$headers = array
(
'Authorization: key=' . PUSH_NOTIFICATION_API_ACCESS_KEY,
'Content-Type: application/json',
);
$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
$result = curl_exec($ch );
curl_close( $ch );
echo $result;
现在问题出现在iOS上我发现推送通知是可靠的并且在应用程序处于前台时运行良好,但是一旦我将它背景(或锁定屏幕),它们就会停止通过直到我再次前景,然后在后台发送的所有通知都会立即通过。
根据插件“使用入门”指南,我在info.plist
启用了后台处理。
我尝试将content_availiable
更改为content-availiable
,同时将其移至通知数组中,同时将其值设置为true
,'true'
,{{1} }和1
我还尝试将'1'
添加到通知和整体有效负载中,但是在前景未锁定状态之外我仍然无法使其工作。
我还注意到实际通知列表中没有任何内容触发(从屏幕顶部拉下来),我知道正在接收通知的唯一方法是播放某个声音文件,因为它是通过写入在调试日志中。
感谢您的支持,感谢您的帮助。
答案 0 :(得分:5)
如果您希望它在不在后台运行时显示在iOS上,请确保您的消息Json具有{"content-available" : "1", "alert" : ""}
属性。
对于Android,推送通知确实不是100%可靠,有特定设备的障碍可能会阻止您的通知显示。
可能会有"测试发送" Firebase上的功能(到目前为止我只使用过Azure Push Hub),因此您可以尝试查看您的消息Json是否配置正确。
答案 1 :(得分:3)
我会尝试发送数据消息
$fields = array
(
'to' => $ID->notification_token,
"content_available" => true,
'priority'=>10,
'data' => array('title' => 'You have a new message', 'body' => 'Hooray', 'sound'=>'default', 'vibration'=>'default'),
);
答案 2 :(得分:0)
当应用程序在后台时,使用 ApnsConfig 在 iOS 中显示警报。这对我有用。
var pushMessage = new FcmMessage
{
Data = new Dictionary<string, string>
{
{ Constants.PushMessages.MessageId, $"{message.MessageId}" },
{ Constants.PushMessages.TopicId, $"{message.TopicId}" },
{ Constants.PushMessages.Type, $"{message.Type}" },
{ Constants.PushMessages.Title, message.Title },
{ Constants.PushMessages.Content, message.Content },
{ Constants.PushMessages.CreatedBy, message.CreatedBy },
{ Constants.PushMessages.CreatedOn, $"{message.CreatedOn}" }
},
Token = registrationToken,
Apns = new ApnsConfig
{
Aps = new Aps
{
Alert = new ApsAlert
{
Title = message.Title,
Body = message.Content
}
}
}
};
await FirebaseMessaging.DefaultInstance.SendAsync(pushMessage);