private void sendNotify(String messageBody) {
Intent intent = new Intent();
intent.setAction(Constants.NOTIFY);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
int uniqueId = (int) System.currentTimeMillis();
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Creates the PendingIntent
PendingIntent notifyPendingIntent =
PendingIntent.getActivity(
this,
0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT
);
String channelID = "com.myapp.ind.push.ServiceListener";// The id of the channel.
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel mChannel = new NotificationChannel(channelID, "MyApp", importance);
// Create a notification and set the notification channel.
Notification notification = getNotificationBuilder(messageBody, notifyPendingIntent, defaultSoundUri)
.setChannelId(channelID)
.build();
if (notificationManager != null) {
notificationManager.createNotificationChannel(mChannel);
notificationManager.notify(uniqueId, notification);
}
} else if (notificationManager != null) {
PendingIntent pendingIntent = PendingIntent.getBroadcast(this,
uniqueId /* Request code */,
intent,
PendingIntent.FLAG_ONE_SHOT);
NotificationCompat.Builder notificationBuilder = getNotificationBuilder(messageBody, pendingIntent, defaultSoundUri);
notificationManager.notify(uniqueId /* ID of notification */,
notificationBuilder.build());
}
}
private NotificationCompat.Builder getNotificationBuilder(String messageBody, PendingIntent pendingIntent, Uri defaultSoundUri) {
return new NotificationCompat.Builder(this)
.setSmallIcon(android.R.drawable.ic_dialog_info)
.setContentTitle(getString(R.string.notification_title))
.setContentText(messageBody)
.setStyle(new NotificationCompat.BigTextStyle().bigText(messageBody))
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
}
编辑:
在点击通知后,它一直运行良好,直到6.0。在更新到8.0之后,它在Google Pixel设备中就不起作用了。它不是打开应用程序或将应用程序带到前台。
创建一个Receiver类,如下所示。和寄存器,即清单文件。
public class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() != null
&& intent.getAction().equals("My Call")) {
Intent startIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
context.startActivity(startIntent);
}
}
}
下面的代码从Notification类收到通知后。
private void sendNotification() {
Intent intent = new Intent(this, Receiver.class);
intent.setAction("My Call");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
int uniqueId = (int) System.currentTimeMillis();
PendingIntent pendingIntent = PendingIntent.getBroadcast(this,
uniqueId /* Request code */,
intent,
PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && notificationManager != null) {
String channelID = "Your Channel ID";// The id of the channel.
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel mChannel = new NotificationChannel(channelID, "My_Name", importance);
// Create a notification and set the notification channel.
Notification notification = getNotificationBuilder(messageBody, pendingIntent, defaultSoundUri)
.setChannelId(channelID)
.build();
notificationManager.createNotificationChannel(mChannel);
notificationManager.notify(uniqueId, notification);
} else if (notificationManager != null) {
NotificationCompat.Builder notificationBuilder = getNotificationBuilder();
notificationManager.notify(uniqueId /* ID of notification */,
notificationBuilder.build());
}
}
private NotificationCompat.Builder getNotificationBuilder() {
return new NotificationCompat.Builder(this)
.setSmallIcon(image)
.setContentTitle(title)
.setContentText(message)
.setStyle(new NotificationCompat.BigTextStyle().bigText(messageBody))
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
}
现在我正在接收所有设备中的通知。以前我也收到,但没有显示在状态栏,因为通道实现在奥利奥设备。现在工作得很好。
首先,我想声明我一直在研究推送通知和web通知之间的关系,但我有点困惑。 我从这里读到PWAs的推送通知在Safari上的iOS(iPhone)不起作用:从PWA向iOS发送推送通知 然而,如果iPhone用户使用的是Chrome,这是否意味着它们可以工作呢?或者推送通知在任何浏览器上对iPhone中的PWAs都不起作用? 这就把我带到了web通知。web通知在后台对PWAs起作用吗?我的问题是w
我已经使用IBM Worklight在真实设备上部署了Android应用程序。我已经在Android emulator上启用了推送通知和所有功能,但在真实设备上我看到了以下弹出窗口: 注册推送通知失败。应用程序将无法接收通知。 在LogCat中,此消息: 推送通知将不起作用,因为向GCM服务注册/注销时返回错误身份验证\u错误 在android设备上,senderId的同一个gmail帐户被同步。
我正在尝试使用GCM推送通知。我的设备已注册到服务器,并且我还创建了设备注册id。但当我试图从服务器发送消息时,消息不会到达已注册的设备。谁能帮帮我吗? 我的主要activity 软件包COM.ATI.GCM; 导入com.google.android.gcm.gcmRegistratar; 导入Android.os.AsyncTask; 导入Android.os.bundle; 导入androi
通过上面的行,我得到了一个URL,它将在大约一个月内有用。 现在我不可能做的是将推送通知发送到应用程序。 任何关于如何使用Uri和如何将信息发送到它的光我会很高兴,因为我的400错误,那是关于我的post消息的一些错误。 我可以在发布或调试模式下获得推送通知吗? 使用PHP可以完成带有正确Uri的推送通知吗?
我有一些关于实现推送通知的问题。事情是, > 订阅对象中的所有数据都是必需的吗?或者只有终点。 如果用户登录的设备超过10台,我是否需要为每个设备存储订阅值?是这样的吗?还是应该存储上次登录设备的订阅值?如果是这样,那么其余9个将不会收到任何通知。 如果您正在存储所有loggedin设备的订阅值,那么用户是否登录了多个浏览器?他会在每个浏览器中收到通知吗?这是标准做法吗? 欢迎提出建议,任何标准做
问题内容: 我正在尝试基于PyAPN为iPhone实现推送通知 当我在本地运行它时,它阻止并提示我手动输入密码,并且在我执行该操作之前不起作用 我不知道如何设置它以便在没有提示的情况下工作 这是我的代码: 问题答案: 创建不带短语的.pem文件时,请指定 创建不带短语的.pem文件 用短语创建.pem文件 如果您有一个带有密码的.pem文件,则可以使用以下 方法 来 删除其PyAPN的密码 用于制