在 Android 中处理推送通知

improve this page | report issue

概述

在 Android 应用程序处理已收到的任何推送通知之前,需要配置 Google Play Services 支持。在配置应用程序后,可以使用 MobileFirst 提供的通知 API 来注册和注销设备以及预订和取消预订标记。在本教程中,您将学会如何在 Android 应用程序中处理推送通知。

先决条件:

跳转至:

通知配置

创建新的 Android Studio 项目或使用现有项目。
如果该项目中还没有 MobileFirst 本机 Android SDK,请遵循将 Mobile Foundation SDK 添加到 Android 应用程序教程中的指示信息。

项目设置

  1. Android → Gradle 脚本中,选择 build.gradle(模块:应用程序)文件,并将以下行添加到 dependencies 中:

    com.google.android.gms:play-services-gcm:9.0.2
    
    • 注:存在一个已知的 Google 缺陷,此缺陷将阻止使用最新的 Play Services 版本(当前为 9.2.0)。请使用较低的版本。

    以及:

    compile group: 'com.ibm.mobile.foundation',
             name: 'ibmmobilefirstplatformfoundationpush',
             version: '8.0.+',
             ext: 'aar',
             transitive: true
    

    或在单独一行中:

    compile 'com.ibm.mobile.foundation:ibmmobilefirstplatformfoundationpush:8.0.+'
    
  2. Android → 应用程序 → 清单中,打开 AndroidManifest.xml 文件。

    • 向顶部的 manifest 标记中添加以下许可权:

      <!-- Permissions -->
      <uses-permission android:name="android.permission.WAKE_LOCK" />
      
      <!-- GCM Permissions -->
      <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
      <permission
       	    android:name="your.application.package.name.permission.C2D_MESSAGE"
       	    android:protectionLevel="signature" />
      
    • application 标记添加以下内容:

      <!-- GCM Receiver -->
      <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="your.application.package.name" />
            </intent-filter>
      </receiver>
      
      <!-- MFPPush Intent Service -->
      <service
            android:name="com.ibm.mobilefirstplatform.clientsdk.android.push.api.MFPPushIntentService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            </intent-filter>
      </service>
      
      <!-- MFPPush Instance ID Listener Service -->
      <service
            android:name="com.ibm.mobilefirstplatform.clientsdk.android.push.api.MFPPushInstanceIDListenerService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.android.gms.iid.InstanceID" />
            </intent-filter>
      </service>
      
      <activity android:name="com.ibm.mobilefirstplatform.clientsdk.android.push.api.MFPPushNotificationHandler"
           android:theme="@android:style/Theme.NoDisplay"/>
      

      注:请确保将 your.application.package.name 替换为您应用程序的实际包名。

    • 向应用程序的活动中添加以下 intent-filter

      <intent-filter>
          <action android:name="your.application.package.name.IBMPushNotification" />
          <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
      

通知 API

MFPPush 实例

必须在一个 MFPPush 实例上发出所有 API 调用。为此,需要创建一个类级别字段(例如 private MFPPush push = MFPPush.getInstance();),然后在该类中调用 push.<api-call>

也可以针对要访问推送 API 方法的每个实例都调用 MFPPush.getInstance().<api_call>

验证问题处理程序

如果 push.mobileclient 作用域映射到安全性检查,那么需要确保在使用任何推送 API 之前,存在已注册的匹配验证问题处理程序

凭证验证教程中了解有关验证问题处理程序的更多信息。

客户端

Java 方法 描述
initialize(Context context); 针对提供的上下文,初始化 MFPPush。
isPushSupported(); 设备是否支持推送通知。
registerDevice(JSONObject, MFPPushResponseListener); 向推送通知服务注册设备。
getTags(MFPPushResponseListener) 在推送通知服务实例中检索可用的标记。
subscribe(String[] tagNames, MFPPushResponseListener) 使设备预订指定的标记。
getSubscriptions(MFPPushResponseListener) 检索设备当前预订的所有标记。
unsubscribe(String[] tagNames, MFPPushResponseListener) 取消对特定标记的预订。
unregisterDevice(MFPPushResponseListener) 从推送通知服务注销设备。

初始化

在客户机应用程序使用适当的应用程序上下文连接到 MFPPush 服务时为必需项。

  • 应先调用此 API 方法,然后再使用任何其他 MFPPush API。
  • 注册回调函数以处理已收到的推送通知。
MFPPush.getInstance().initialize(this);

是否支持推送

检查设备是否支持推送通知。

Boolean isSupported = MFPPush.getInstance().isPushSupported();

if (isSupported ) {
    // Push is supported
} else {
    // Push is not supported
}

注册设备

向推送通知服务注册设备。

MFPPush.getInstance().registerDevice(null, new MFPPushResponseListener<String>() {
    @Override
    public void onSuccess(String s) {
        // Successfully registered
    }

    @Override
    public void onFailure(MFPPushException e) {
        // Registration failed with error
    }
});

获取标记

从推送通知服务检索所有可用标记。

MFPPush.getInstance().getTags(new MFPPushResponseListener<List<String>>() {
    @Override
    public void onSuccess(List<String> strings) {
        // Successfully retrieved tags as list of strings
    }

    @Override
    public void onFailure(MFPPushException e) {
        // Failed to receive tags with error
    }
});

预订

预订所需的标记。

String[] tags = {"Tag 1", "Tag 2"};

MFPPush.getInstance().subscribe(tags, new MFPPushResponseListener<String[]>() {
    @Override
    public void onSuccess(String[] strings) {
        // Subscribed successfully
    }

    @Override
    public void onFailure(MFPPushException e) {
        // Failed to subscribe
    }
});

获取预订

检索设备当前预订的标记。

MFPPush.getInstance().getSubscriptions(new MFPPushResponseListener<List<String>>() {
    @Override
    public void onSuccess(List<String> strings) {
        // Successfully received subscriptions as list of strings
    }

    @Override
    public void onFailure(MFPPushException e) {
        // Failed to retrieve subscriptions with error
    }
});

取消预订

取消对标记的预订。

String[] tags = {"Tag 1", "Tag 2"};

MFPPush.getInstance().unsubscribe(tags, new MFPPushResponseListener<String[]>() {
    @Override
    public void onSuccess(String[] strings) {
        // Unsubscribed successfully
    }

    @Override
    public void onFailure(MFPPushException e) {
        // Failed to unsubscribe
    }
});

注销

从推送通知服务实例注销设备。

MFPPush.getInstance().unregisterDevice(new MFPPushResponseListener<String>() {
    @Override
    public void onSuccess(String s) {
        disableButtons();
        // Unregistered successfully
    }

    @Override
    public void onFailure(MFPPushException e) {
        // Failed to unregister
    }
});

处理推送通知

要处理推送通知,需要设置 MFPPushNotificationListener。可实现以下某种方法来执行此操作。

选项 1

在要处理推送通知的活动中。

  1. 向类声明中添加 implements MFPPushNofiticationListener
  2. 通过在 onCreate 方法中调用 MFPPush.getInstance().listen(this),将该类设置为侦听器。
  3. 然后,需要添加以下必需方法:

    @Override
    public void onReceive(MFPSimplePushNotification mfpSimplePushNotification) {
         // Handle push notification here
    }
    
  4. 在此方法中,您将收到 MFPSimplePushNotification,并可以处理关于期望行为的通知。

选项 2

通过对 MFPPush 实例调用 listen(new MFPPushNofiticationListener()) 来创建侦听器,如下所述:

MFPPush.getInstance().listen(new MFPPushNotificationListener() {
    @Override
    public void onReceive(MFPSimplePushNotification mfpSimplePushNotification) {
        // Handle push notification here
    }
});

样本应用程序图像

样本应用程序

单击以下载 Android Studio 项目。

用法样例

请查看样本的 README.md 文件以获取指示信息。

Last modified on March 09, 2017