我正在为我的课程项目开发一个小应用程序(类似于Snapchat),允许用户发送和接收图片和视频。我使用名为Parse的BaaS,它使用GCM来发送推送通知。然而,问题是我的校园使用代理网络,因为许多应用程序不起作用(WhatsApp,Instagram),而一些应用程序(Snapchat)工作,但他们的通知没有交付。我的应用也是如此。
有没有办法克服这个问题,假设我对代理网络没有任何影响,而且蜂窝网络没有选择。
答案 0 :(得分:4)
这完全取决于您的校园网络访问策略。如果您的校园代理防火墙不提供对这些站点的访问,则无法执行此操作。但是,您可以要求他们通过代理防火墙允许这些URL。
或者,您可以通过在代码中添加行来使用其他一些外部代理服务器
System.setProperty("https.proxyHost", "<IP>");
System.setProperty("https.proxyPort", "<Port>");
您尝试连接Google API的位置。假如你使用的是这样的东西,
URL url = new URL("https://android.googleapis.com/gcm/send");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Authorization", "key="+<your api key>);
在尝试连接Google API的这些行之前,添加代理设置行,以上两行。此外,尝试使用您的校园代理以及其他一些外部代理,您将了解问题是否与您的校园代理有关。
试试这个,希望这对你的问题有帮助.. !!!!!
答案 1 :(得分:2)
使用像这样的东西,
import com.google.android.gcm.server.Sender;
public class ProxySender extends Sender {
public ProxySender(String key) {
super(key);
// TODO Auto-generated constructor stub
}
@Override
protected HttpURLConnection getConnection(String url) throws IOException {
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("<YOUR SERVER IP>", YOUR PORT));
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(proxy);
return conn;
}
}
答案 2 :(得分:2)
根据谷歌的说法,为了正确接收GCM,我们必须打开几个端口。详情如下,
“如果您的组织有防火墙限制进出互联网的流量,您需要将其配置为允许与GCM连接,以便您的Android设备接收消息。要打开的端口是:5228,5229, GCM通常仅使用5228,但它有时使用5229和5230. GCM不提供特定的IP,因此您应该允许防火墙接受到Google的ASN中列出的IP块中包含的所有IP地址的传出连接15169 。“
您是否尝试通过解析SDK发送GCM? 你能访问这些网址吗?