微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android中的quickblox推送通知集成

如何解决android中的quickblox推送通知集成

我正在我的应用程序中集成 quickblox。我已经成功集成了聊天功能,而且效果很好。但是推送通知功能不起作用。我已按照以下步骤集成推送通知

  1. 在 firebase 上创建一个项目。实现云消息传递并在主项目中集成google JSON。

  2. 登录 quickblox 帐户会在推送通知添加 google 服务器密钥。

  3. 遵循 https://docs.quickblox.com/docs/android-push-notifications 文档,在添加 firebase cloude 消息后,我在清单文件添加以下内容

    <Meta-data android:name="com.quickblox.messages.TYPE" android:value="FCM" /> <Meta-data android:name="com.quickblox.messages.SENDER_ID" android:value="@string/sender_id" /> <Meta-data android:name="com.quickblox.messages.QB_ENVIRONMENT" android:value="DEVELOPMENT" />

并在menifest中注册以下服务

`<service android:name="com.quickblox.messages.services.fcm.QBFcmpushListenerService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

<service android:name="com.quickblox.messages.services.fcm.QBFcmpushInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
    </intent-filter>
</service>`
  1. 添加自动推送通知并在 chatActivity 中的代码下面实现了

`QBSettings.getInstance().setEnablePushNotification(false); // 认为真

        boolean isEnabled = QBSettings.getInstance().isEnablePushNotification();`
  1. 创建推送通知订阅

    QBSubscription 订阅 = 新的 QBSubscription(QBNotificationChannel.GCM); 订阅.setEnvironment(QBEnvironment.DEVELOPMENT); // String deviceid = ""; 最终 TelephonyManager mTelephony = (TelephonyManager) BottomActivity.this.getSystemService( Context.TELEPHONY_SERVICE);

            deviceid = Settings.Secure.getString(BottomActivity.this.getContentResolver(),Settings.Secure.ANDROID_ID);
         subscription.setDeviceUdid(deviceid);
         subscription.setRegistrationID(registrationID);
         subscription.setEnvironment(QBEnvironment.DEVELOPMENT);
         QBPushNotifications.createSubscription(subscription);
    
  2. 为推送通知注册接收器。

    LocalbroadcastManager.getInstance(this).registerReceiver(pushbroadcastReceiver,new IntentFilter(Consts.ACTION_NEW_FCM_EVENT));

  3. 发送推送消息。

    ` String outMessage = messageEditText.getText().toString().trim(); QBEvent qbEvent = new QBEvent(); qbEvent.setNotificationType(QBNotificationType.PUSH); qbEvent.setEnvironment(QBEnvironment.DEVELOPMENT);

                 qbEvent.setMessage(outMessage);
                 qbEvent.setPushType(QBPushType.GCM);
    
                 StringifyArrayList<Integer> userIds = new StringifyArrayList<>();
                 userIds.add(QBSessionManager.getInstance().getSessionParameters().getUserId());
    
                 userIds.add(qbChatDialog.getRecipientId());
                 Log.d(TAG,"My Id: " + qbChatDialog.getRecipientId());
                 qbEvent.setUserIds(userIds);
    
                 QBPushNotifications.createEvent(qbEvent).performAsync(new QBEntityCallback<QBEvent>() {
                     @Override
                     public void onSuccess(QBEvent qbEvent,Bundle bundle) {
    
                     }
    
                     @Override
                     public void onError(QBResponseException e) {
    
                         KeyboardUtils.hideKeyboard(messageEditText);
                         invalidateOptionsMenu();
                     }
                 });
    

    `

按照结果执行所有步骤后,我能够成功发送消息。我可以在 quickblox 管理面板中看到一条消息,它显示了已发送的消息。订阅也被创建。但是我的另一部手机没有收到通知。但是,当我尝试使用 firebase cloud 发送强制消息时,我能够收到在 firebase 上键入的消息。

谁能指导我在这方面缺少什么?我是 quicblox 的新手。

解决方法

您似乎已经可以接收推送,但是您的 BroadcastReceiver(从 QBFcmPushListenerService 扩展)没有执行任何操作来向用户显示通知。请检查您是如何制作接收器的。我给你举个例子:https://github.com/QuickBlox/quickblox-android-sdk/blob/master/sample-chat-java/app/src/main/java/com/quickblox/sample/chat/java/fcm/PushListenerService.java

请看一下这个功能:

public class PushListenerService extends QBFcmPushListenerService {
    private static final String TAG = PushListenerService.class.getSimpleName();
    private static final int NOTIFICATION_ID = 1;

    protected void showNotification(String message) {
        NotificationUtils.showNotification(App.getInstance(),SplashActivity.class,App.getInstance().getString(R.string.notification_title),message,R.drawable.ic_logo_vector,NOTIFICATION_ID);
    }

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
    }

    @Override
    protected void sendPushMessage(Map data,String from,String message) {
        super.sendPushMessage(data,from,message);
        Log.v(TAG,"From: " + from);
        Log.v(TAG,"Message: " + message);
        if (ActivityLifecycle.getInstance().isBackground()) {
            showNotification(message);
        }
    }
}

在那里回调“sendPushMessage”——它是关于接收推送消息。这不是发送。这就像将它发送给用户:)

请注意:

if (ActivityLifecycle.getInstance().isBackground()) {
   showNotification(message);
}

这部分逻辑取决于应用程序的行为。如果应用程序现在在前台运行 - 将不会显示通知。如果您删除此条件 - 将显示所有捕获的推送。

附言另一个建议是 - 系统中禁用了您的应用程序显示通知的权限,如果您已经实现了上述所有代码,请检查此权限。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。