GCM не приходят сообщения на устройство

Ответить
Exact1990
Сообщения: 20
Зарегистрирован: 16 май 2012, 17:37

GCM не приходят сообщения на устройство

Сообщение Exact1990 » 10 фев 2015, 14:40

Не приходят сообщения на устройства, хотя все сделал по документации гугловской и перепроверил 100 раз.. RegId получаю без проблем, с сервера когда отправляю он мне говорит, что google сервер все успешно получил, а до устройства пуши не доходят, или не ловятся приложением... Уже и не знаю где искать... Помогите разобраться:

AndroidManifest.xml:

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="co.itbeaver.io" >

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <permission
        android:name="co.itbeaver.io.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name="co.itbeaver.io.gcm.permission.C2D_MESSAGE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MyActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service
            android:name=".SampleSpiceService"
            android:enabled="true"
            android:exported="true" >
        </service>

        <receiver
            android:name=".GcmBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />

                <category android:name="co.itbeaver.io" />
            </intent-filter>
        </receiver>

        <service
            android:name=".GcmIntentService"
            android:enabled="true">
        </service>
    </application>

</manifest>
GcmBroadcastReceiver.java:

Код: Выделить всё

package co.itbeaver.io;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.support.v4.content.WakefulBroadcastReceiver;

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Explicitly specify that GcmIntentService will handle the intent.
        ComponentName comp = new ComponentName(context.getPackageName(),
                GcmIntentService.class.getName());
        // Start the service, keeping the device awake while it is launching.
        startWakefulService(context, (intent.setComponent(comp)));
        setResultCode(Activity.RESULT_OK);
    }
}
GcmIntentService.java

Код: Выделить всё

package co.itbeaver.io;

import android.app.IntentService;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.app.NotificationCompat;
import android.util.Log;

import com.google.android.gms.gcm.GoogleCloudMessaging;

public class GcmIntentService extends IntentService {
    public static final int NOTIFICATION_ID = 1;
    private NotificationManager mNotificationManager;
    public GcmIntentService() {
        super("634737xxxxxx");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        Bundle extras = intent.getExtras();
        GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);

        String msgType = gcm.getMessageType(intent);

        if(!extras.isEmpty()){
            if(GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(msgType)){
                sendNotification(extras.toString());
            }else if(GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(msgType)){
                sendNotification(extras.toString());
            }else if(GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(msgType)){
                sendNotification(extras.toString());
            }
        }
        // Release the wake lock provided by the WakefulBroadcastReceiver.
        GcmBroadcastReceiver.completeWakefulIntent(intent);
    }

    // Put the message into a notification and post it.
    // This is just one simple example of what you might choose to do with
    // a GCM message.
    private void sendNotification(String msg) {
        mNotificationManager = (NotificationManager)
                this.getSystemService(Context.NOTIFICATION_SERVICE);

        PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
                new Intent(this, MyActivity.class), 0);

        NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(this)
                        .setSmallIcon(R.drawable.ic_launcher)
                        .setContentTitle("GCM Notification")
                        .setStyle(new NotificationCompat.BigTextStyle()
                                .bigText(msg))
                        .setContentText(msg);

        mBuilder.setContentIntent(contentIntent);
        mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
    }
}
Последний раз редактировалось Exact1990 11 фев 2015, 08:16, всего редактировалось 1 раз.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: GCM не приходят сообщения на устройство

Сообщение KamiSempai » 10 фев 2015, 16:13

В манифесте для GcmBroadcastReceiver не правильно прописан intent-filter.
У вас category android:name="co.itbeaver.io", а должно быть "co.itbeaver.iopinion".
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Exact1990
Сообщения: 20
Зарегистрирован: 16 май 2012, 17:37

Re: GCM не приходят сообщения на устройство

Сообщение Exact1990 » 11 фев 2015, 08:19

Это не помогло. Вообще странная магия, уже даже попросил консультации у знакомого android-программиста, он дал мне рабочий код, объяснил как и что делать, но результата это не принесло. Сообщения не приходят.
Хотя установил на свой девайс тестирование пушей - они пришли.
RegID получаю, при отправке с сервера по этому RegID и ключу из developer console ошибок аутентификации нет.
А приложение молчит... Уже и не знаю куда копать.. Который день убиваю.
Пробовал и без файвая работать - тот же результат. Перечитал кучу советов на stack и прочих ресурсах и все равно не могу найти решение проблемы

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: GCM не приходят сообщения на устройство

Сообщение altwin » 11 фев 2015, 10:22

На других девайсах, эмуляторе или genymotion работает?
Последний раз редактировалось altwin 11 фев 2015, 10:28, всего редактировалось 2 раза.
Изображение

Exact1990
Сообщения: 20
Зарегистрирован: 16 май 2012, 17:37

Re: GCM не приходят сообщения на устройство

Сообщение Exact1990 » 11 фев 2015, 10:23

На других девайсах не работает, на эмуляторе тоже нет

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: GCM не приходят сообщения на устройство

Сообщение altwin » 11 фев 2015, 10:29

Exact1990 писал(а):На других девайсах не работает, на эмуляторе тоже нет
У вас google developer аккаунт активный? вы уже оплатили $25 ? И проверьте файрвол, вполне воможно что порты по которым идет сообщение заблокированны. На сколько я помню используются порты: 5228-5230

С кодом проблем быть не должно, потому нужно искать что мешает дойти сообщению до девайса.
Изображение

Exact1990
Сообщения: 20
Зарегистрирован: 16 май 2012, 17:37

Re: GCM не приходят сообщения на устройство

Сообщение Exact1990 » 11 фев 2015, 10:33

У вас google developer аккаунт активный? вы уже оплатили $25 ? И проверьте файрвол, вполне воможно что порты по которым идет сообщение заблокированны.
Насколько я знаю GCM не зависит от google play develop. Хотя пробовал и со своего аккаунта создавать и с аккаунта команды (который оплачен) результат один и тот же.
Файрвол вроде не должен быть, ведь попытки получить сообщения используя мобильное подключение имели тот же успех, а на устройстве вроде на самом никакого файрвола нет.

+ как я писал использовал тестовые приложение отправляющие push - проблем не было

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: GCM не приходят сообщения на устройство

Сообщение altwin » 11 фев 2015, 10:49

Я так понимаю тут super переается senderId?
[syntax=java5]
public GcmIntentService() {
super("634737xxxxxx");
}
[/syntax]

Если да, то попробуйте передать его в в конструктор
[syntax=java5]
public GcmIntentService(String senderId) {
super(senderId);
}

// и оставьте конструктор по умолчанию
public GCMIntentService() {
super("Test"); // строка не имеет значения
}
[/syntax]

P.S. хотя это странно и я совсем не уверен в этом... может эта статья поможет - http://dexxtr.com/post/28188228252/rena ... vice-class
Изображение

Exact1990
Сообщения: 20
Зарегистрирован: 16 май 2012, 17:37

Re: GCM не приходят сообщения на устройство

Сообщение Exact1990 » 11 фев 2015, 10:58

Не привело к каким-либо результатам.
Статью изучу чуть позже, о результатах отпишусь. Спасибо за помощь

Exact1990
Сообщения: 20
Зарегистрирован: 16 май 2012, 17:37

Re: GCM не приходят сообщения на устройство

Сообщение Exact1990 » 11 фев 2015, 12:52

Ссылка не помогла. Причем пытался и передавать мой кастомный путь, и перенес классы в корень и назвал как указано - все равно тишина :(

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: GCM не приходят сообщения на устройство

Сообщение altwin » 11 фев 2015, 15:01

Exact1990 писал(а):Ссылка не помогла. Причем пытался и передавать мой кастомный путь, и перенес классы в корень и назвал как указано - все равно тишина :(
трудно сказать... и странно, но попробуйте всеже еще заменить в манифесте строку
[syntax=xml] <uses-permission android:name="co.itbeaver.io.gcm.permission.C2D_MESSAGE" /> [/syntax]
на эту:
[syntax=xml] <uses-permission android:name="co.itbeaver.io.permission.C2D_MESSAGE" /> [/syntax]
т.е. убрать "gsm".
И добавьте имя пакета в ресивере, т.е. выглядеть он должен примерно так:
[syntax=xml]


<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<!-- Receives the actual messages. -->
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<!-- Receives the registration id. -->
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />

<category android:name="co.itbeaver.io" />
</intent-filter>
</receiver>
[/syntax]

P.S> по поводу ссылки весь прикол в том, что сейчас вы использьзуете имя ресивера в манифесте не указывая имя пакета, т.е. текущий пакет. Но для этого нужно переопределить метод:
[syntax=java5]
@Override
protected String getGCMIntentServiceClassName(Context context) {
return "com.dexxtr.gcm.GCMService";
} [/syntax]
Либо в манифесте указать правильное имя пакета вместо .GcmBroadcastReceiver ну и по поводу других правок - нужно проверять, трудно определить так сходу по "бумажке".
Изображение

Exact1990
Сообщения: 20
Зарегистрирован: 16 май 2012, 17:37

Re: GCM не приходят сообщения на устройство

Сообщение Exact1990 » 12 фев 2015, 14:13

Удивительно, но проблема имеется только для Wi-Fi и оператора Megafon, на билайне при равных прочих получили push %)

Ответить