Xamarin Firebase推送通知-在Android上收到间歇性重复推送通知

时间:2019-01-14 01:25:30

标签: c# android firebase xamarin

我的Android APP用C#编写,它使用Azure推送通知服务通过Firebase(FCM)将推送通知发送到Android,通过Apple Push服务将iOS发送到iOS。推送通知注册发生在安装应用程序时(该应用程序还删除了所有先前的注册)。

iOS上的推送通知运行正常。

在Android上,有时会收到重复的通知:

  • 间歇性(并非总是)
  • 仅在某些设备上
  • 在应用处于前景,背景,被杀死的所有情况下都会发生
  • 同时收到重复的通知

,根据我的数据库记录,我确定该应用程序仅发送1条通知。 我怀疑注册过程导致了FCM中的重复令牌。但是后来我发现重复发生了意外,设备上没有任何新的卸载/安装。

请问有什么主意吗?这花了我很多时间。

1 个答案:

答案 0 :(得分:0)

我也遇到过同样的问题。要解决此问题,请在注册到通知中心之前,先取消注册属于该设备的先前标签,

//Test class

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Test {
    public void test() {
        try {
            Connection con = DriverManager.getConnection("jdbc:neo4j:bolt://localhost", "neo4j", "neo4j");
            String query = "MATCH (n) return id(n)";
            PreparedStatement ps = con.prepareStatement(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                System.out.println("RESULT: " + rs.getObject("id(n)"));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


//Servlet

import java.io.IOException;
   import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/testingservlet")
public class testingservlet extends HttpServlet {
private static final long serialVersionUID = 1L;

    public testingservlet() {
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            new Test().test();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

然后您再次在通知中心注册。