Не приходят push-уведомления, quickblox, android

Итак, я пытаюсь реализовать push-уведомления с помощью GCM и quickBlox, поэтому я могу подписаться на push-уведомления с помощью quickblox, и пока сообщение отправляется, уведомление не получено.

В основном я следовал приведенному здесь руководству: android#Send_Push_Notifications_from_Application

Вот мой код

public class MainActivity extends AppCompatActivity {

static final String APP_ID = "45535";
static final String AUTH_KEY = "L-kz28SrxuSrn23";
static final String AUTH_SECRET = "zJX63sgj9Nm3qMB";
static final String ACCOUNT_KEY = "sor71FWvtVnx7d9JdTyd";

private GoogleCloudMessaging googleCloudMessaging;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    QBSettings.getInstance().init(getApplicationContext(), APP_ID, AUTH_KEY, AUTH_SECRET);
    QBSettings.getInstance().setAccountKey(ACCOUNT_KEY);

    if (checkPlayServices()) {
        // Start IntentService to register this application with GCM.
        Intent intent = new Intent(this, RegistrationIntentService.class);
        startService(intent);
    }


    // Create quickblox session with user
    QBAuth.createSession("laddu", "chowmein", new QBEntityCallback<QBSession>() {
        @Override
        public void onSuccess(QBSession session, Bundle params) {
            //request Registration ID
            String registrationId = "16441570";

            // Subscribe to Push Notifications
            subscribeToPushNotifications(registrationId);

        }

        @Override
        public void onError(QBResponseException errors) {

        }
    });


    EditText text;
    text = (EditText) findViewById(R.id.editText);

    Button send;
    send = (Button) findViewById(R.id.button);
    send.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            StringifyArrayList<Integer> userIds = new StringifyArrayList<Integer>();
            //add different user ID
            userIds.add(16335930);
            userIds.add(16441570);

            QBEvent event = new QBEvent();
            event.setUserIds(userIds);
            event.setEnvironment(QBEnvironment.DEVELOPMENT);
            event.setNotificationType(QBNotificationType.PUSH);
            event.setPushType(QBPushType.GCM);

            //HashMap<String, String> data = new HashMap<String, String>();
            //data.put("data.message", "Hello");
            //data.put("data.type", "welcome message");

            event.setMessage("Hello");

            QBPushNotifications.createEvent(event, new QBEntityCallback<QBEvent>() {
                @Override
                public void onSuccess(QBEvent qbEvent, Bundle args) {
                    // sent
                }

                @Override
                public void onError(QBResponseException errors) {

                }
            });
        }
    });
}

/**
 * Check the device to make sure it has the Google Play Services APK. If
 * it doesn't, display a dialog that allows users to download the APK from
 * the Google Play Store or enable it in the device's system settings.
 */
private boolean checkPlayServices() {
    GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
    int resultCode = apiAvailability.isGooglePlayServicesAvailable(this);
    if (resultCode != ConnectionResult.SUCCESS) {
        if (apiAvailability.isUserResolvableError(resultCode)) {
            //apiAvailability.getErrorDialog(this, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST)
                    //.show();
        } else {
            //Log.i(TAG, "This device is not supported.");
            finish();
        }
        return false;
    }
    return true;
}


public void subscribeToPushNotifications(String registrationID) {
    QBSubscription subscription = new QBSubscription(QBNotificationChannel.GCM);
    subscription.setEnvironment(QBEnvironment.DEVELOPMENT);
    //
    String deviceId;
    final TelephonyManager mTelephony = (TelephonyManager) getSystemService(
            Context.TELEPHONY_SERVICE);
    if (mTelephony.getDeviceId() != null) {
        deviceId = mTelephony.getDeviceId(); //*** use for mobiles
    } else {
        deviceId = mTelephony.getDeviceId();
        //deviceId = Settings.Secure.getString(activity.getContentResolver(),
           //     Settings.Secure.ANDROID_ID); //*** use for tablets
    }
    subscription.setDeviceUdid(deviceId);
    Toast.makeText(MainActivity.this, deviceId, Toast.LENGTH_SHORT).show();
    //
    subscription.setRegistrationID(registrationID);
    //
    QBPushNotifications.createSubscription(subscription, new QBEntityCallback<ArrayList<QBSubscription>>() {

        @Override
        public void onSuccess(ArrayList<QBSubscription> subscriptions, Bundle args) {

        }

        @Override
        public void onError(QBResponseException error) {

        }
    });
}

}

открытый класс MyGcmListenerService расширяет GcmListenerService {

private static final String TAG = "MyGcmListenerService";

@Override
public void onMessageReceived(String from, Bundle data) {
    String message = data.toString();
    Log.d(TAG, "From: " + from);
    Log.d(TAG, "Message: " + message);

    if (from.startsWith("/topics/")) {
        // message received from some topic.
    } else {
        // normal downstream message.
    }

    sendNotification(message);
    // [END_EXCLUDE]
}

private void sendNotification(String message) {
    Intent intent = new Intent(this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);

    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setContentTitle("GCM Message")
            .setContentText(message)
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}

}


person lykan    schedule 16.08.2016    source источник
comment
У нас похожая проблема. Есть ли разница, если вы измените этот QBEnvironment.DEVELOPMENT на QBEnvironment.PRODUCTION?   -  person dazza5000    schedule 31.08.2016
comment
Нет, не совсем, однако один из моих товарищей по команде все же починил   -  person lykan    schedule 02.09.2016


Ответы (1)


Вы можете проверить следующее:

  1. Проверить push-сертификат: Панель администратора -> Push-уведомления -> Настройки -> APNS, GCM и т. д.
  2. Проверить подписки: Панель администратора -> Push-уведомления -> Подписки. Также вы можете проверить подписку на пользователя: Панель администратора -> Пользователи -> "Ваш" пользователь
  3. Отправить push-уведомления из панели администратора -> Push-уведомления -> Отправить http://quickblox.com/developers/SimpleSample-messages_users-android#Send_Push_Notifications_from_Admin_panel
person Romario    schedule 02.09.2016