我的问题与使用PHP curl的android推送通知有关.问题是我向我的Android设备发送一个推送通知,但问题是我的一些设备不止一次获得该通知,有时20次,而有些只获得一次,因此排除了应用程序的错误.我真的不知道问题是什么.感谢您的预期响应/解决方案.请参阅下面的推送代码
function googlePush($DevID, $Message , $id)
{
// Set POST variables
$url = 'https://android.googleapis.com/gcm/send';
// static $a=1;
$DeviceID = array($DevID);
$Message = array("MSG" => $Message, "MSGCNT" => $Message, "message" => $Message, "id" => $id);
$fields = array(
'registration_ids' => $DeviceID,
'data' => $Message,
);
$headers = array(
'Authorization: key=' . 'xxxxxxxxxxxxxxxxxxxxxxxx',
'Content-Type: application/json'
);
// Open connection
$ch = curl_init();
// Set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); …Run Code Online (Sandbox Code Playgroud) 我是 Mac OSX 新手,正在运行 Yosemite。我正在尝试使用此官方指南来设置 Maven ,以便设置 Google Cloud Messaging 后端。这就是我所做的:
1)下载Maven zip(版本:apache-maven-3.3.9)并解压
2)正如指南所说,我需要将 bin 目录添加到我的 PATH 变量中。所以我在终端中执行了以下操作
export M2_HOME=/usr/local/apache-maven/apache-maven-3.3.9
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_60
export PATH=$JAVA_HOME/bin:$M2_HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)
终端没有返回任何响应。然而,当我检查 Maven 是否已安装时,使用:
mvn-版本
我收到一条消息说:
-bash:mvn:找不到命令
我究竟做错了什么?我是否正确按照步骤设置了 Maven?
编辑:
MVN Bin目录路径为:
/用户/Earthling/文档/项目/MobiProject/apache-maven-3.3.9
发送两个通知时,第二个通知将覆盖通知中心中的第一个通知.根据文档,这应该只在使用标签时发生:
"tag":指示每条通知消息是否在通知中心上生成新条目.如果未设置,则每个请求都会创建一个新通知.如果已设置,并且已显示具有相同标记的通知,则新通知将替换现有通知.
然而,无论我是否为标签设置了值,这种情况一直发生在我身上.
我甚至尝试设置一个随机标签&collapse_key(据我所知,在这种情况下我不应该相关,但我试了一下).仍然没有帮助.这是我发送的通知对象的示例:
{
"tokens":[
"my-device-token"
],
"profile":"my-profile-tag",
"notification":{
"message":"message",
"android":{
"payload":{
"collapse_key":9918519,
"tag":2825928
}
}
}
}
Run Code Online (Sandbox Code Playgroud) android push-notification google-cloud-messaging ionic-framework firebase-cloud-messaging
我正在尝试实现一个通知系统,您可以在其中订阅另一个用户(不是 Firebase 主题),并在该用户发布内容时获取推送通知。
为此,我决定使用设备组和注册令牌,以便用户可以将推送通知发送到他/她登录的每个设备。
目前,用户可以订阅另一个用户,还可以使用通知键接收他登录的每个设备的推送通知。为此,我每次用户登录时都会获取设备的注册令牌,并使用以下结构将其存储在数据库(应用程序服务器)中。
用户
设备
但是,我无法弄清楚如何管理应用程序服务器中的令牌刷新。
考虑这种情况:
1)user_1首次登录设备。
2) 使用registration_token_1创建设备组(在FCM 和应用程序服务器中)。
3)user_1卸载应用并重新安装(令牌刷新)。
4) user_1 重新登录。
5) App Server 将refresh_token_1添加到user_1,他现在有2 个令牌,旧的和新的。
6) user_1注销和user_2登录同一设备,refresh_token_1转移给user_2。
7) FCM 删除 user_1 的设备组,因为 user_1不再具有任何注册令牌。但 user_1 在应用服务器中仍然拥有 notification_key 和带有 Registration_token_1 的设备。
8) user_1 无法登录,因为应用程序服务器认为他已经拥有设备组并尝试将刷新令牌_1 添加到 FCM 中不存在的 notification_key,并收到错误代码 400“通知密钥不存在”。
我对此有几个问题:
如果刷新令牌,是否有办法从 FCM 检索旧令牌?这样,应用程序服务器可以用新令牌替换旧令牌,而无需将令牌与设备标识符配对,如果标识符在卸载/恢复出厂设置等情况下不存在,则这似乎不可靠
您能否推荐一种更好的方法来将用户(通知键)与应用程序服务器中的注册令牌进行映射?
编辑 我已经阅读了一些其他线程,并找到了一种可能的解决方案,其形式是将注册令牌与设备标识符配对,因此当刷新令牌时,我可以查找设备标识符并替换/删除令牌。现在,我不确定 iOS 和 Android 是否都具有持久标识符,这些标识符是否可以在应用程序卸载、数据擦除和恢复出厂设置之外存在……
班级:
class SubscriptionMessageService : FirebaseMessagingService() {
companion object {
private val TAG = SubscriptionMessageService::class.java.simpleName
private const val REMOTE_MESSAGE_SUBSCRIPTIONS_KEY = "currentStatus"
}
override fun onMessageReceived(remoteMessage: RemoteMessage?) {
remoteMessage?.data?.let {
val data = it
if (data.isNotEmpty()) {
var result: List<SubscriptionStatus>? = null
if (REMOTE_MESSAGE_SUBSCRIPTIONS_KEY in data) {
result = data[REMOTE_MESSAGE_SUBSCRIPTIONS_KEY]?.let {
SubscriptionStatus.listFromJsonString(it)
}
}
if (result == null) {
Log.e(TAG, "Invalid subscription data")
} else {
val app = application as SubApp
app.repository.updateSubscriptionsFromNetwork(result)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
错误:“onMessageReceived”不覆盖任何内容
Github 链接:https …
我想在我的应用程序中使用GCM(Google云消息传递),我发现我需要开发人员控制台.
我找到了这个:https://play.google.com/apps/publish/signup/
在这个网站上,它说我需要支付25美元才能注册,但在Android开发者网站上,我发现了另一个链接https://console.developers.google.com/project?utm_referrer=http:%2F%2Fdeveloper.android.com%2Fgoogle %2Fgcm%2Fgs.html
这是GCM免费还是我需要支付25美元?
错误:无法访问未找到com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable的AbstractSafeParcelable类文件
我想在我的应用程序中使用推送通知,其他一些事情,比如我手动处理的服务器数据库同步,那么哪个是最好的选择呢?
我也可以在FCM中使用GCM API密钥吗?
FCM对于无限数量的邮件是免费的吗?
android firebase google-cloud-messaging firebase-cloud-messaging