Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何向多个android设备发送推送通知_Android_Delphi_Google Cloud Messaging_Push - Fatal编程技术网

如何向多个android设备发送推送通知

如何向多个android设备发送推送通知,android,delphi,google-cloud-messaging,push,Android,Delphi,Google Cloud Messaging,Push,在这篇文章中,我遵循了图坦卡蒙关于如何使用GCM发送推送通知的指导,我成功地从应用程序发送和接收通知,但是,我无法从不同的android设备接收通知,设备只能发送和接收到自身。我需要它发送到所有设备使用相同的项目id? 这是我用过的代码 unit Unit1; interface uses System.SysUtils, System.Classes, GCMNotification, IndyPeerImpl, IdBaseComponent, IdComponent, I

在这篇文章中,我遵循了图坦卡蒙关于如何使用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\u id
更改为
registration\u id
。添加(…)并确保
GetDeviceRegistrationId()
返回预期注册id收件人的数组。

但为什么同一应用程序的副本不接收通知?它发送和接收到iteslf!您的发件人是否拥有这些其他设备的所有注册ID?当你发送信息时,你也应该得到回复。这是一个JSON响应,显示成功和失败,如果有的话。是的,我有ID,我试图通过lisview中的循环ID发送推送消息,但没有成功!!var n:整数;开始n:=0到ListView1.Items.Count-1执行DataModule1.PushMessage(ListView1.ItemAppearanceName[n]);请看一下@Koh