![](/img/trans.png)
[英]How to send push notification to android devices even when app is killed?
[英]how to send push notification to multiple android devices
我關注了此鏈接中關於如何使用GCM發送推送通知的信息,我設法從應用發送和接收通知,但是,我無法從其他Android設備接收通知,該設備僅向自己發送和接收通知。 我需要它發送到使用相同項目ID的所有設備嗎? 這是我使用的代碼
unit Unit1;
interface
uses
System.SysUtils, System.Classes, GCMNotification, IndyPeerImpl,
IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL
;
type
TDataModule1 = class(TDataModule)
procedure DataModuleCreate(Sender: TObject);
procedure DataModuleDestroy(Sender: TObject);
private
{ Private declarations }
{$IFDEF ANDROID}
gcmn: TGCMNotification;
{$ENDIF}
public
{ Public declarations }
function GetDeviceRegistrationId: string;
function PushMessage(Pushmessage: string): string;
end;
var
DataModule1: TDataModule1;
const
YOUR_GCM_SENDERID = '1232010xxxxxx';
YOUR_API_ID = 'AIzaSyBzvpTa-xxxxxxxxxxxxxxxxx';
implementation
{%CLASSGROUP 'FMX.Controls.TControl'}
{$R *.dfm}
procedure TDataModule1.DataModuleCreate(Sender: TObject);
var
isRegistered : boolean;
begin
isRegistered := true;
{$IFDEF ANDROID}
try
gcmn := TGCMNotification.Create(self);
gcmn.SenderID := YOUR_GCM_SENDERID;
isRegistered := gcmn.DoRegister;
except
end;
{$ENDIF}
end;
procedure TDataModule1.DataModuleDestroy(Sender: TObject);
begin
{$IFDEF ANDROID}
gcmn.Free();
{$ENDIF}
end;
function TDataModule1.GetDeviceRegistrationId: string;
begin
{$IFDEF ANDROID}
result := gcmn.RegistrationID;
{$ELSE}
result := 'Mobile Test';
{$ENDIF}
end;
function TDataModule1.PushMessage(Pushmessage : string):string;
const
sendUrl = 'https://android.googleapis.com/gcm/send';
var
Params: TStringList;
AuthHeader: STring;
idHTTP: TIDHTTP;
SSLIOHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
idHTTP := TIDHTTP.Create(nil);
try
SslIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
idHTTP.IOHandler := SSLIOHandler;
idHTTP.HTTPOptions := [];
Params := TStringList.Create;
try
Params.Add('registration_id='+ GetDeviceRegistrationId());
Params.Values['data.message'] := Pushmessage;
idHTTP.Request.Host := sendUrl;
AuthHeader := 'Authorization: key=' + YOUR_API_ID;
idHTTP.Request.CustomHeaders.Add(AuthHeader);
IdHTTP.Request.ContentType := 'application/x-www-form-urlencoded;charset=UTF-8';
result := idHTTP.Post(sendUrl, Params);
finally
Params.Free;
end;
finally
FreeAndNil(idHTTP);
end;
end;
end.
這是按鈕中的代碼
DataModule1.PushMessage(Edit1.Text);
我不習慣使用Delphi,但是您似乎需要修改PushMessage
方法。
更改registration_id
到registration_ids
在Params.Add(...),並確保GetDeviceRegistrationId()
返回預期的注冊ID收件人的數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.