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