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 消息传递