package com.asecum.com.campussicapp;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.media.RingtoneManager;
import android.net.Uri;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.NotificationCompat;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Created by asecum5 on 24/08/17.
*/
public class Firebase_NotificationService extends FirebaseMessagingService {
private static final String TAG = "NOTICIAS";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
/*String from = remoteMessage.getFrom();
Log.d(TAG, "Mensaje recibido de: " + from);
if(remoteMessage.getNotification() != null) {
Log.d(TAG, "Notification: " + remoteMessage.getNotification().getBody());
showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
}
if(remoteMessage.getData().size()>0){
Log.d(TAG, "Data: " + remoteMessage.getData());
}*/
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Data: " + remoteMessage.getData());
try {
JSONObject data = new JSONObject(remoteMessage.getData());
String jsonMessage = data.getString("extra_information");
Log.d(TAG, "onMessageReceived: \n" + "Extra information: " + jsonMessage);
} catch (JSONException e) {
e.printStackTrace();
}
}
if (remoteMessage.getNotification() != null) {
String title = remoteMessage.getNotification().getTitle();
String message = remoteMessage.getNotification().getBody();
showNotification(title, message);
}
}
private void showNotification(String title, String body) {
Intent intent = new Intent(this, NotificationActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_home_black_24dp)
.setContentTitle(title)
.setContentText(body)
.setAutoCancel(true)
.setVibrate(new long[]{100, 250, 100, 250, 100, 250})
.setSound(soundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.asecum.com.campussicapp">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="MAINACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".SplashScreen"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".NotificationActivity">
<intent-filter>
<action android:name="NOTIFICATIONACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<service
android:name=".Firebase_InstanceIdService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<service
android:name=".Firebase_NotificationService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/colorAccent" />
</application>
</manifest>
dependencies {
...
compile 'com.google.firebase:firebase-core:10.2.6'
compile 'com.google.firebase:firebase-messaging:10.2.6'
testCompile 'junit:junit:4.12'
}
apply plugin: `com.google.gms.google-services`
项目建造。gradle
dependencies {
...
classpath 'com.google.gms:google-services:3.1.0'
}
我认为这是由于Firebase中“数据”风格的云消息和“通知”风格的云消息之间的差异造成的。
对于通知样式的消息:
FCM代表客户端应用程序自动将消息显示给最终用户设备。
在Mac命令行中,您可以使用如下所示的a脚本通过Google的服务器向特定的应用实例ID发送数据样式消息:
curl -X POST \
--Header "Authorization: key=<get authorization key from Firebase console - Project Settings - Web API Key>” \
--Header "Content-Type: application/json" https://fcm.googleapis.com/fcm/send \
-d " \
{ \
\"to\”:\”<get id for your particular android device app instance from Firebase Instance ID service in your app>\”, \
\"data\": \
{ \
\"title\":\" test title here \", \
\"body\":\" test body here \"
}, \
\"priority\": \"normal\" \
}"
请注意,JSON中没有“通知”块。
又见这和这
我想用Xamarin格式的C#创建一个基于文本的Android游戏。 在故事中,我想设置角色任务,这需要一些时间,例如“我去挖这个洞,完成后给你打电话。” 如何将通知设置为在设置的时间之后显示?例如,上述声明可能需要10分钟,然后用户收到继续游戏的通知? 我一周前才开始做C#,所以如果这是noobish,或者已经被问到了,我道歉。我到处都找过,但有几种类型的通知,当我试图理解它时,似乎我在读法语。
当应用程序完全关闭时,如何以编程方式发送通知? 示例:用户关闭应用程序,也在Android Taskmanager中,然后等待。应用程序应在X秒后或应用程序检查更新时发送通知。 我试图使用这些代码示例,但是: 应用程序关闭时推送通知-活动太多/无法工作 我如何让我的应用程序在关闭时发送通知很多信息,但我不知道如何处理 当android应用程序关闭时,如何发送本地通知?-很多信息,但我不知道如何处理
我目前正在开发Android(Cordova)应用程序,我正在使用Oneignal推送通知。首先,如果我关闭应用程序,推送通知不会被传递,所以我不得不添加一个Cordova插件来保持我的应用程序在后台运行: 我在deviceready之后的代码: 谢了。
如果应用程序关闭,我将如何使其发送通知?我正在制作一个从web服务器读取数据的应用程序,只有当该应用程序关闭且web服务器上的值更改时,我才需要向用户发送通知。
Firebase push在某些设备上不起作用,当应用程序关闭时只有数据负载。请参阅以下线程:https://github.com/firebase/quickstart-android/issues/41 我知道当应用程序被swipe杀死时,一些OEM会杀死应用程序的所有服务,这些服务直接影响FirebbaseMessagingService并且由于这个onMessageReceived()方法
我的应用程序有推送通知(FCM)。当应用程序在前台运行时,我可以在onMessageReceived()函数中获取数据负载。当应用程序在后台运行或应用程序完全关闭时,不会调用onMessageReceived()函数。我的问题是,当app在后台或关闭时,是否可能获得数据有效载荷? 提前道谢!