切换帐户后获取GCM消息

时间:2015-06-27 08:00:00

标签: php google-api google-cloud-messaging

我的Android应用可以与设备的Google帐户一起使用。 因此,如果我有帐户“a.gmail”和帐户“b.gmail”,我可以在它们之间切换而无需重新启动应用程序。

当我切换到一个帐户时,说“a.gmail”,我将 GCM regId 发送到服务器,并可以从中获取推送消息。一切都很好。

但是,如果用户在使用帐户“a.gmail”运行应用程序时向用户“b.gmail”发送推送消息,我将其展开。如果我在服务器发送邮件后切换到帐户“b.gmail”, 我没有得到任何通知。

有没有办法处理这样的场景?我认为标志$fields = array( 'to' => $to, 'delay_while_idle' => true, 'data' => array( "title" => "this is the title", "body" => "this is the body", "icon" => "@drawable/icon_notif") ); 已足够,但它没有帮助。

这是我格式化消息的方式(PHP):

AuthorizeEndpointPath

2 个答案:

答案 0 :(得分:1)

根据最新的GCM服务器设置建议,您将安装自己的服务器,该服务器负责将消息推送到GCM。您的设备主要与您的服务器进行通信,以设置注册ID和其他本地更改。

如果您的服务器设计得如此(用户向帐户发送推送消息" b.gmail" )正在通过服务器进行。然后..

您必须告诉您的服务器您已经间接切换了帐户,但用户消息尚未发送给您。

答案 1 :(得分:0)

我找到了一个解决方案,也许它可能对有类似问题的人有用,所以我把它写下来。

幸运的是,我使用“id”将用户存储在数据库中,但也使用设备的SIM和SubscriberId。 因此,对于每个设备,如果用户拥有多个帐户,我将获得该用户的所有注册ID。

查询是这样的:

SELECT `RegId` FROM `UserGCM` WHERE `UserId` IN
(
    SELECT ru2.`UserId`
    FROM `RegisteredUser` ru1
    INNER JOIN `RegisteredUser` ru2 ON
        ru1.`SubscriberId` = ru2.`SubscriberId` AND ru1.`SIM` = ru2.`SIM`
    WHERE ru1.`UserId` = ?
)

然后对于找到的每个regId,我发送一条消息:

...
$query->bind_param('i', $did);
$query->execute();
$query->bind_result($regId);

while ($row = $query->fetch())
{
    $response = $gcpm->send($regId, $did, $nam);
}

did是客户端知道谁是收件人所需的目标ID。

客户端仍然只会收到一条消息,但现在知道该消息是针对当前帐户还是针对另一个帐户。 现在,如果用户点击该消息,我可以询问他是否要切换到其他帐户以查看该消息。