Xamarin中的后台推送通知

6
请考虑以下问题:
我正在使用用于 Xamarin 的以下插件执行推送通知,我正在尝试在 iOS 和 Android 上运行此插件。

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上,当应用程序在前台运行时,推送通知是可靠的并且运行得很完美,但是一旦我将其放到后台(或锁定屏幕),它们就停止传递,直到我再次将其置于前台,然后在后台发送的所有通知都会同时传递过来。
我已经按照插件“入门”指南启用了后台进程。
我尝试将content_availiable更改为content-availiable,还将其移动到通知数组中,并将其值设置为true'true'1'1'
我还尝试在通知和整个有效负载中添加"alert" => "",但是除了在前台解锁状态下,我仍然无法使其工作。
我还注意到实际通知列表中似乎没有触发任何内容(从屏幕顶部拉下),我知道通知正在被接收的唯一方法是播放某个声音文件并在调试日志中编写。
感谢您的时间,任何帮助将不胜感激。

有关此问题的任何解决方案吗?我也遇到了同样的问题。当我的应用程序在 iOS 前台时,无法收到通知,在后台时可以收到通知。如果您找到了任何解决方案,请帮忙一下。 - Devesh M
3个回答

5

如果您希望在iOS未在后台运行时显示消息,请确保您的消息Json具有{"content-available" : "1", "alert" : ""}属性。

至于Android,推送通知并不是100%可靠的,可能会出现设备特定的障碍,阻止您的通知显示。

在Firebase上可能有一个“测试发送”功能(我到目前为止只使用过Azure Push Hub),因此您可以尝试并查看您的消息Json是否已正确配置。


1
大家好,我成功地通过将droid更改为高优先级,并将其从数据消息更改为通知来提高准确性。今晚我将测试content-available方法,看看它是否能够帮助iOS。感谢您的时间。 - Aphire
1
嘿,卢卡斯,抱歉回复晚了,最近非常忙。Android 看起来运行得很完美,但我仍然无法让 iOS 在前台解锁状态下运行。我刚刚发布了一篇编辑内容,并且我还将在问题上奖励赏金。如果没有人提供 iOS 的答案,我将根据你的 Android 帮助向你授予赏金。谢谢! - Aphire

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'),
);

我刚刚尝试了这个,但不幸的是结果相同。当在前台时可以正常显示,但在后台或锁屏时没有任何显示。 - Aphire

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接