Google Cloud Messaging(GCM)使用哪种端口和协议?
我们经历过一些消息无法通过的事情,并且已经注意到它取决于我们坐在哪个网络上.
我已经实现了一个简单的GCM客户端和服务器.客户端使用当前的GCM客户端API(而不是已弃用的帮助程序库).服务器(C#和.NET)遵循相应的服务器准则(使用HTTP).我的服务器在公司域内的计算机上运行,因此我将客户端设备连接到公司网络内的Wi-Fi接入点,但可以访问Internet.
简而言之,我的问题是在4.3+手机上收到通知,但在连接到公司Wi-Fi网络时,4.1.2手机上从未收到通知.如果我将4.1.2设备连接到我们的公共访客Wi-Fi网络,则会按预期接收GCM消息,但该应用程序无法连接到公司服务器.
我看到一些迹象表明,当公司网络具有过度保护的防火墙时,GCM可能会失败(例如此处).但如果它只是一个防火墙问题,那么4.3+设备肯定不会收到任何消息?
我的测试手机如下:
服务器已从所有五个设备接收到有效的注册ID.在一个15秒的计时器上,它发出一条发往所有五个注册IDS的消息.响应始终显示发送了5条消息,没有错误,也没有更改注册ID.但是,它始终在上面列出的前三个设备上接收,而从不在最后两个设备上接收(运行4.1.2).当我调试它们时,根本没有调用广播接收器.
我还验证了所有五种设备:
这实际上是我发布的另一个问题的延续,除了现在我正在使用Azure的推送通知遥测,Google在Play控制台中停止了FCM诊断.
我收到用户的报告称他们没有收到通知.但Azure遥测会显示这些结果,即使对于这些通知:
"GcmOutcomeCounts": {
"Outcome": {
"Name": "Success",
"Count": "1"
}
}
Run Code Online (Sandbox Code Playgroud)
Crashlytics没有显示崩溃,所以我唯一想到的就是调用日志API来查看它失败或停止工作的地方,但在这种情况下它甚至都没有到达应用程序.
必须有一种方法来确定通知失败的确切位置和原因.它是什么?
我即将在服务器上推出 GCM 的实现,需要通过 IP 打开适当的防火墙。
有谁知道我在哪里可以找到 android.googleapis.com 的 IP 地址范围?
谢谢!
我是Android新手,并为gcm推送通知做一个演示应用程序.
我已经开发了所有这些代码,并且GCM推送通知正在我的环境中的设备上出现,但是当我在其他网络设备中测试此代码获得注册ID时,但是当向云发送消息时服务器端获得不匹配的发送者ID响应.我的代码如下:
checkNotNull(CommonUtilities.SENDER_ID, "SENDER_ID");
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
setContentView(R.layout.activity_push_android);
mDisplay = (TextView) findViewById(R.id.display);
final String regId = GCMRegistrar.getRegistrationId(this);
Log.i(TAG, "registration id ===== " + regId);
if (regId.equals("")) {
GCMRegistrar.register(this, CommonUtilities.SENDER_ID);
} else {
// Device is already registered on GCM
if (GCMRegistrar.isRegisteredOnServer(this)) {
// Skips registration.
Toast.makeText(getApplicationContext(),
"Already registered with GCM", Toast.LENGTH_LONG)
.show();
} else {
// Try to register again, but not in the UI thread.
// It's also necessary to cancel the thread onDestroy(),
// hence the use of AsyncTask …Run Code Online (Sandbox Code Playgroud)