Android&Quickblox (api 3.2):订阅推送通知

Posted

技术标签:

【中文标题】Android&Quickblox (api 3.2):订阅推送通知【英文标题】:Android&Quickblox (api 3.2): Subscribing to push notifications 【发布时间】:2017-01-25 12:19:03 【问题描述】:

我无法订阅推送通知。我做到了:

1) 我创建了一个 firebase 应用程序,其包名与我的 MainActivity 包名相同;

2) 我下载了 google-service.json 文件并将其存储在我的 /app/ gradle 文件旁边;

3) 我添加了谷歌指南显示的 C2D 和 WAKE-LOCK 权限;

4) 我在 quickblox 管理面板的 pushnotification 设置选项卡中添加了 API-KEY;

5) 我按照 quickblox 指南修改了清单;

6) 我添加了一个推送通知侦听器和一个本地广播接收器,如上述指南所示。

这就是我的清单的样子:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="it.unical.sistemidistribuiti.ddf.appraia">
<uses-permission android:name="android.permission.WAKE_LOCK" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<permission android:name="it.unical.sistemidistribuiti.ddf.appraia.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="it.unical.sistemidistribuiti.ddf.appraia.permission.C2D_MESSAGE"/>
<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" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:largeHeap="true"
    android:theme="@style/AppTheme"
    android:name="it.unical.sistemidistribuiti.ddf.appraia.AppraiaApplication">
    <activity
        android:name="it.unical.sistemidistribuiti.ddf.appraia.StartActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar"
        android:screenOrientation="portrait"
        android:configChanges="orientation|keyboardHidden">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="it.unical.sistemidistribuiti.ddf.appraia.MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar"
        android:screenOrientation="portrait"
        android:configChanges="orientation|keyboardHidden">
    </activity>
    <activity
        android:name="it.unical.sistemidistribuiti.ddf.appraia.NewsDetailActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar"
        android:screenOrientation="portrait"
        android:configChanges="orientation|keyboardHidden">
    </activity>
    <activity
        android:name="it.unical.sistemidistribuiti.ddf.appraia.CreatePostActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar"
        android:screenOrientation="portrait"
        android:configChanges="orientation|keyboardHidden">
    </activity>
    <activity
        android:name="it.unical.sistemidistribuiti.ddf.appraia.UserProfileActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar"
        android:screenOrientation="portrait"
        android:configChanges="orientation|keyboardHidden">
    </activity>
    <receiver
        android:name="com.google.android.gms.gcm.GcmReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="com.example.gcm" />
        </intent-filter>
    </receiver>
    <service
        android:name="com.quickblox.messages.services.fcm.QBFcmPushListenerService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>

</application>

由于我使用的是 3.2 sdk 版本,应用程序应该自动为用户订阅推送通知,但这不会发生。实际上监听器代码什么也没打印:

 //This is in AppraiaApplication extends Application
 @Override
public void onCreate() 
    super.onCreate();
    QBSettings.getInstance().init(getApplicationContext(), APP_ID, AUTH_KEY, AUTH_SECRET);
    QBSettings.getInstance().setAccountKey(ACCOUNT_KEY);
    QBPushManager.getInstance().addListener(new QBPushManager.QBSubscribeListener() 
        @Override
        public void onSubscriptionCreated() 
            System.out.println("onSubscriptionCreated");
        

        @Override
        public void onSubscriptionError(final Exception e, int resultCode) 
            System.out.println("onSubscriptionError" + e);
            if (resultCode >= 0) 
                System.out.println("Google play service exception");
            
            System.out.println("onSubscriptionError " + e.getMessage());
        
    );
    QBSettings.getInstance().setEnablePushNotification(true);
    LocalBroadcastManager.getInstance(this).registerReceiver(pushBroadcastReceiver,
            new IntentFilter("new-push-event"));
    System.out.println("Application creation ended");

我做错了什么?

【问题讨论】:

【参考方案1】:

您似乎没有使用用户登录,并且未执行订阅。还可以查看日志,可能会有类似 D/QBASDK: SubscribeService: SubscribeService created 之类的信息。因此,您可以确定订阅是否被执行。

【讨论】:

以上是关于Android&Quickblox (api 3.2):订阅推送通知的主要内容,如果未能解决你的问题,请参考以下文章

比较 Layer、Applozic、Quickblox 和 SendBird 在 Android 应用程序中的快速 WhatsApp 消息传递

无法解决:com.quickblox:quickblox-android-sdk-chat:2.6.1

究竟如何在 android 中使用 quickblox?

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

Quickblox 不间断地发送推送消息

Android 上的 Quickblox 视频通话