FCM 不会立即发送数据消息



我通过数据而不是通知发送通知。并且数据的默认优先级是正常的。

当我使用admin.messaging().send()时,它甚至大部分时间都不会发送。但是我无法调整admin.messaging().sendToDevice()的优先级,因为它只接受"数据"和"通知"。当我使用这种方法时,它大多甚至不发送消息。我不知道为什么 send() 也不起作用,我想知道如何使消息具有高优先级。

测试手机:小米,中兴。

云函数代码,几乎从不发送:

const payload = 
{  
"delay_while_idle": false,
"android": 
{
"priority": "high",
"ttl":0
},
data:
{
is_there_new_notification: "true"
},
token: token
};
return  admin.messaging().send(payload)
.then((response) => {
// Response is a message ID string.
//console.log('Successfully sent message:', response);
return response;
}).catch((error) => {
// console.log('Error sending message:', error);
return error;
});

云功能代码 2,在打瞌睡模式下不会立即发送,有时即使设备处于唤醒状态也不会发送)

const payload =    {  
data:
{
is_there_new_notification: "true"
}
};
return  admin.messaging().sendToDevice(token, payload).then((response) => {
// Response is a message ID string.
//console.log('Successfully sent message:', response);
return response;
})
.catch((error) => {
// console.log('Error sending message:', error);
return error;
});

编辑:

安卓服务代码:

@Override
public void onMessageReceived(RemoteMessage remoteMessage)
{
super.onMessageReceived(remoteMessage);
Log.d(TAG, "onMessageReceived: " + remoteMessage.getData());
//This is just a string variable return "true" in string. it is being sent in order to notify there are notifications. We don't need its content.
if(remoteMessage.getData().get(getString(R.string.notification_is_there_new_notification))!= null)
{
FirebaseMethods.checkAndShowIfThereAreNotifications(context);
}
}

安卓清单:

<service
android:name=".FirebaseFCMService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>

相关资源:

https://firebase.google.com/docs/cloud-messaging/concept-options https://developer.android.com/training/monitoring-device-state/doze-standby.html

尝试通过代码发送通知,这对我来说工作正常。请参考以下代码:

FCM.java

public class FCM {
final static private String FCM_URL = "https://fcm.googleapis.com/fcm/send";
/**
* 
* 
* 
* Method to send push notification to Android FireBased Cloud messaging
* Server.
* 
* 
* 
* @param tokenId
*            Generated and provided from Android Client Developer
* 
* @param server_key
*            Key which is Generated in FCM Server
* 
* @param message
*            which contains actual information.
* 
* 
* 
*/
static void send_FCM_Notification(String tokenId, String server_key, String message, String req) {
try {
// Create URL instance.
URL url = new URL(FCM_URL);
// create connection.
HttpURLConnection conn;
conn = (HttpURLConnection) url.openConnection();
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);
// set method as POST or GET
conn.setRequestMethod("POST");
// pass FCM server key
conn.setRequestProperty("Authorization", "key=" + server_key);
// Specify Message Format
conn.setRequestProperty("Content-Type", "application/json");
// Create JSON Object & pass value
JSONObject infoJson = new JSONObject();
//infoJson.put("title", "Here is your notification.");
infoJson.put("body", message);
infoJson.put("msg", req);
JSONObject json = new JSONObject();
json.put("to", tokenId.trim());
//json.put("notification", infoJson);
json.put("data", infoJson);
json.put("priority", "high");
json.put("time_to_live",5);

OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(json.toString());
wr.flush();
int status = 0;
if (null != conn) {
status = conn.getResponseCode();
}
if (status != 0) {
if (status == 200) {
// SUCCESS message
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
Log.d("ResultData","Android Notification Response : " + reader.readLine());
} else if (status == 401) {
// client side error
Log.d("ResultData","401 Notification Response : TokenId : " + tokenId + " Error occurred :");
} else if (status == 501) {
// server side error
Log.d("ResultData","Notification Response : [ errorCode=ServerError ] TokenId : " + tokenId);
} else if (status == 503) {
// server side error
Log.d("ResultData","Notification Response : FCM Service is Unavailable  TokenId : " + tokenId);
}
}
} catch (MalformedURLException mlfexception) {
// Prototcal Error
Log.d("ResultData","Error occurred while sending push Notification!.." + mlfexception.getMessage());
} catch (IOException mlfexception) {
// URL problem
Log.d("ResultData",
"Reading URL, Error occurred while sending push Notification!.." + mlfexception.getMessage());
} catch (JSONException jsonexception) {
// Message format error
Log.d("ResultData",
"Message Format, Error occurred while sending push Notification!.." + jsonexception.getMessage());
} catch (Exception exception) {
// General Error or exception.
Log.d("ResultData","Error occurred while sending push Notification!.." + exception.getMessage());
}
}

测试活动.java

public class TestActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_act);
String tokenId;// your token ID
String server_key; //you server key ;
String message;// Your message
FCM.send_FCM_Notification( tokenId,server_key,message,"Reply");
}
}

相关内容

  • 没有找到相关文章

最新更新