【发布时间】:2017-04-18 16:02:18
【问题描述】:
我正在编写自己的消息提供程序以在 iOS 和 Android 上发送推送通知。我的提供商在 iOS 上运行良好。我的问题是安卓。在应用程序未运行的情况下,手机会收到消息并通知用户有消息进来。我只看到消息中的图标。不显示消息正文。如果应用程序正在运行,应用程序会获取消息事件,我可以在 JSON 中看到消息正文和消息标题。所以看起来信息正在通过。我已经在运行 JellyBean 和 Marshmallow 的 Android 上进行了尝试,并得到了相同的结果。我还尝试使用 Google 的 FCM 网站上的测试通知。我通过他们的网络通知发送得到了相同的结果。有什么想法吗?
这是我在 Delphi 中使用的代码:
HttpClient.Request.URL := 'https://fcm.googleapis.com/fcm/send';
HttpClient.Request.ContentType := 'application/json';
HttpClient.Request.CustomHeaders.Add('Authorization: key = ***'); // Server Key from Google
HttpClient.Request.CharSet := 'utf-8';
JSONMsg := TJSONObject.Create;
JSONMsg.AddPair('to', devicetoken);
JSONInfo := TJSONObject.Create;
JSONInfo.AddPair('body', edtMessage.Text);
JSONInfo.AddPair('title', 'CODY Mobility');
JSONInfo.AddPair('priority', 'high');
JSONTrue := TJsonTrue.Create;
JSONFalse := TJsonFalse.Create;
JSONInfo.AddPair('content_available', JSONTrue);
JSONInfo.AddPair('dry_run', JSONFalse);
JSONToSend := TStringStream.Create(JSONMsg.ToString, TEncoding.UTF8);
StatusMemo.Lines.Add('Sending Android message to device: ' + deviceToken);
try
HttpClient.Post('https://fcm.googleapis.com/fcm/send', JSONToSend);
except
on E:Exception do begin
StatusMemo.Lines.Add('Message send failed: ' + E.Message);
end;
end;
StatusMemo.Lines.Add('Android message response: ' + HttpClient.ResponseText);
FreeAndNil(JSONTrue);
FreeAndNil(JSONFalse);
【问题讨论】:
-
您是否尝试过为 Android 发送
data-only 消息负载?有了这个,可以确定你的应用应该是处理通知的那个,而不是系统托盘。 -
是的,我确实尝试仅发送数据有效负载,但这并没有解决我的问题。当应用程序未运行时,我希望能够向手机发送和显示消息。当应用程序运行时,应用程序会获取有效负载、数据或通知中的所有信息,然后应用程序可以毫无问题地显示这些信息。
-
嗨乔。因此,您的意思是说您的应用程序能够在前台和后台接收消息,并且即使您的应用程序关闭或终止,您也只想接收消息。对吗?
-
正确。当应用程序关闭时,我希望 Android OS 显示消息文本。它显示的只是通知的应用程序图标。
标签: android delphi google-cloud-messaging