没有收到推送通知,quickblox,android

Posted

技术标签:

【中文标题】没有收到推送通知,quickblox,android【英文标题】:Not receiving push notification, quickblox, android 【发布时间】:2016-08-16 23:42:06 【问题描述】:

所以我正在尝试使用 GCM 和 quickBlox 实现推送通知,因此我能够使用 quickblox 订阅推送通知,并且在发送消息时,不会收到任何通知。

我基本上遵循这里的指南:http://quickblox.com/developers/SimpleSample-messages_users-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());

【问题讨论】:

我们遇到了类似的问题。如果将此 QBEnvironment.DEVELOPMENT 更改为 QBEnvironment.PRODUCTION 有什么区别 不,不是,但是我的一位队友确实修复了它 【参考方案1】:

你可以检查下:

    检查推送证书:管理面板 -> 推送通知 -> 设置 -> APNS、GCM 等 检查订阅:管理面板 -> 推送通知 -> 订阅。您还可以检查用户的订阅:管理面板 -> 用户 -> “您的”用户 从管理面板发送推送 -> 推送通知 -> 发送 http://quickblox.com/developers/SimpleSample-messages_users-android#Send_Push_Notifications_from_Admin_panel

【讨论】:

以上是关于没有收到推送通知,quickblox,android的主要内容,如果未能解决你的问题,请参考以下文章

使用 quickblox 的 Quickblox 聊天

Quickblox:无法获得推送通知

quickblox 推送通知在生产模式下不起作用

在 Android 中从 QuickBlox 发送推送通知

QuickBlox:推送通知设置

有没有办法从 iOS 中的 QuickBlox 获取更新的徽章计数器?