相关疑难解决方法(0)

如何修复Google Cloud Messaging注册错误:SERVICE_NOT_AVAILABLE?

我遇到了一个奇怪的问题 - 我在我的应用程序中使用GCM已经有很长一段时间了,一切都运行得很好.然而,发布谷歌Play前,我从改变了我的应用程序包的名字com.android.testappcom.android.recognition并在此之后GCM停止工作.起初我得到错误GCM sender id not set on constructor并通过覆盖修复它getSenderIds(Context context),但现在我无法获得注册ID.以下是来自logcat的消息: 在此输入图像描述

我怎样才能解决这个问题?当我切换到新包时,我将清单文件中的所有内容更改为新包:

<receiver
        android:name="com.google.android.gcm.GCMBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="com.android.recognition" />
        </intent-filter>
    </receiver>
Run Code Online (Sandbox Code Playgroud)

那背后的问题是什么?可以重命名应用程序包导致这个还是有另一个原因?

java android push-notification google-cloud-messaging

25
推荐指数
5
解决办法
7万
查看次数

Google Cloud Messaging - 即时收到或延迟收到的邮件

我在大学的最后一年项目中使用谷歌云消息.一切正常,但我在使用GCM时遇到了一些麻烦.很多时候,消息要么几乎立即发送,要么延迟很长.

我已经读过这篇文章了,我认为它不适用于这种情况:

GCM通常会在发送后立即发送消息.但是,这可能并非总是可行.例如,设备可能已关闭,脱机或以其他方式不可用.在其他情况下,发送方本身可能会通过使用delay_while_idle标志请求在设备变为活动状态之前不传递消息.最后,GCM可能会故意延迟消息,以防止应用程序消耗过多的资源并对电池寿命产生负面影响.

在我的项目中,每分钟至少有5或6条来自服务器的消息.如果GCM可用于聊天应用程序,它们肯定无法阻止以此速率发送/接收的消息?它变得非常烦人,如果我的项目只在50%的时间内工作,那将非常糟糕...

这是我的服务器发送消息的代码:

@Override
public void run() {

    Message.Builder messageBuilder = new Message.Builder().delayWhileIdle(false);
    Gson gson = new Gson();
    messageBuilder.addData("profile", gson.toJson(profile));
    databaseConnection.notifyDevices(messageBuilder.build());

}

public void notifyDevices(Message message) {

        Sender sender = new Sender(xxx);

        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("message", message.toString()));

        //LOG
        System.out.println("Notifying devices with the following message \n \"" +message+ "\"");

        List<String> deviceIDsList = new ArrayList<String>();
        String [] deviceIDArray;

        //Get devices to notify
        List<JSONDeviceProfile> deviceList = getDevicesToNotify();

        for(JSONDeviceProfile device : deviceList) {
            deviceIDsList.add(device.getDeviceId());

            try {
                sender.send(message, device.getDeviceId(), 5); …
Run Code Online (Sandbox Code Playgroud)

java android google-cloud-messaging

10
推荐指数
1
解决办法
7668
查看次数