开发者社区 问答 正文

关于移动推送的几个问题

1.在继承了MessageReceiver的广播中,只有onMessage调用了。怎么调用onNotification,或者是怎么触发onNotification?
2.没有notification的展示,要怎么做,才能在通知栏显示notification?
3.绑定别名,能不能在Activity中绑定,如果可以要怎么绑定?

展开
收起
yuuro 2019-07-11 14:45:56 545 分享 版权
阿里云 AI 助理回答

1. 在继承了MessageReceiver的广播中,只有onMessage调用了。怎么调用onNotification,或者是怎么触发onNotification

在阿里云推送服务中,onMessageonNotification 是两种不同的回调方法,分别用于处理消息通知。要触发 onNotification,需要确保以下几点:

  • 推送类型为通知onNotification 只有在接收到通知类型的推送时才会被触发。通知类型的推送会自动在系统通知栏弹窗,而消息类型的推送不会。
  • 推送配置正确:在推送服务端发送通知时,确保选择了“通知”类型,并且填写了正确的标题、内容以及扩展参数(如 _ALIYUN_NOTIFICATION_ID_ 等)。
  • 应用在线状态:当应用处于在线状态时,onNotification 回调会被触发,SDK 会默认弹出通知栏通知。如果应用离线,则通知会通过厂商通道送达,此时不会触发 onNotification

解决步骤: 1. 检查推送服务端是否发送的是通知类型,而不是消息类型。 2. 确保推送内容包含标题和内容字段。 3. 如果需要自定义通知样式或拦截通知,可以通过重写 showNotificationNow 方法返回 false,并在 onNotificationReceivedInApp 中自行处理通知逻辑。


2. 没有 notification 的展示,要怎么做,才能在通知栏显示 notification?

如果通知没有在通知栏显示,可能是由于以下原因导致的:

  • 推送类型错误:确保推送的是通知类型,而不是消息类型。消息类型不会在通知栏显示。
  • SDK 默认行为被拦截:如果在 showNotificationNow 方法中返回了 false,则 SDK 不会自动显示通知,需要在 onNotificationReceivedInApp 中手动处理通知逻辑。
  • 通知权限未开启:检查设备的通知权限是否已开启,尤其是 Android 8.0 及以上版本,需要为应用授予通知权限。
  • 厂商通道问题:对于离线设备,通知会通过厂商通道送达。如果厂商通道配置不正确,可能导致通知无法显示。

解决步骤: 1. 确保推送的是通知类型,并且包含标题和内容字段。 2. 检查 showNotificationNow 方法的返回值。如果返回 false,需要在 onNotificationReceivedInApp 中手动创建通知栏通知。

@Override
public boolean showNotificationNow(Context context, Map<String, String> map) {
    return true; // 返回 true 表示允许 SDK 自动显示通知
}
  1. 如果需要自定义通知样式,可以在 onNotificationReceivedInApp 中使用 NotificationManager 创建通知:
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "default")
           .setSmallIcon(R.drawable.ic_notification)
           .setContentTitle(title)
           .setContentText(summary)
           .setPriority(NotificationCompat.PRIORITY_HIGH);
    notificationManager.notify(notificationId, builder.build());
    
  2. 检查设备的通知权限是否已开启,并确保厂商通道配置正确。

3. 绑定别名,能不能在 Activity 中绑定?如果可以,要怎么绑定?

是的,绑定别名可以在 Activity 中完成。绑定别名的作用是为设备设置一个唯一的标识符,方便后续针对特定用户进行精准推送。

绑定别名的步骤: 1. 调用阿里云推送 SDK 提供的 bindAlias 方法,在 Activity 中绑定别名。 2. 确保在绑定别名之前已经初始化了推送 SDK。

代码示例

import com.alibaba.sdk.android.push.CloudPushService;
import com.alibaba.sdk.android.push.CommonCallback;

public class MainActivity extends AppCompatActivity {
    private CloudPushService pushService;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 获取推送服务实例
        pushService = PushServiceFactory.getCloudPushService();

        // 绑定别名
        String alias = "user_unique_id"; // 替换为用户的唯一标识符
        pushService.bindAlias(alias, new CommonCallback() {
            @Override
            public void onSuccess(String response) {
                Log.d("MainActivity", "Bind alias success: " + response);
            }

            @Override
            public void onFailed(String errorCode, String errorMessage) {
                Log.e("MainActivity", "Bind alias failed: " + errorMessage);
            }
        });
    }
}

注意事项: - 别名唯一性:每个设备只能绑定一个别名,重复绑定会覆盖之前的别名。 - 解绑别名:如果需要解绑别名,可以调用 unbindAlias 方法。 - 初始化顺序:确保在调用 bindAlias 之前,推送 SDK 已经完成初始化。


通过以上步骤,您可以解决 onNotification 未触发、通知栏未显示通知以及别名绑定的问题。如果有其他疑问,请参考相关文档或联系技术支持。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: