回到GCM时代,建议您每次向应用程序发布更新时,都应检查是否有新的注册ID(因为更新后不保证相同)应用程序启动。
FCM的情况仍然如此吗?我找不到任何关于此
的文档答案 0 :(得分:3)
当您的应用运行并监控private final String sessionExpiredPage = "/exception/sessionexpired.xhtml";
private final String loginPage = "/login.xhtml";
@Override
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
throws IOException, ServletException {
try {
final HttpServletRequest req = (HttpServletRequest) request;
final HttpServletResponse res = (HttpServletResponse) response;
final HttpSession session = req.getSession(false);
final String reqURI = req.getRequestURI();
if (isRequireSessionControl(req) && isSessionInvalid(req)) {
res.sendRedirect(req.getContextPath() + sessionExpiredPage);
} else {
if (reqURI.indexOf(sessionExpiredPage) >= 0 || reqURI.indexOf(loginPage) >= 0 || (session != null
&& session.getAttribute("username") != null) || reqURI.contains("javax.faces.resource")) {
chain.doFilter(request, response);
} else {
res.sendRedirect(req.getContextPath() + "/login.xhtml");
}
}
} catch (final Exception e) {
e.printStackTrace();
}
}
时,您应检查当前令牌以检测令牌何时更改。
通过调用onTokenRefresh()
来检查应用/主要活动启动时的当前令牌:
FirebaseInstanceID.getToken()
此代码段中调用的public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
String token = FirebaseInstanceId.getInstance().getToken();
if (token != null) {
sendRegistrationToServer(refreshedToken);
}
}
...
方法是您实现将注册令牌发送到您自己的服务器(或Firebase数据库之类的无服务器解决方案)的方法。
通过继承sendRegistrationToServer()
并覆盖FirebaseInstanceIdService
来监控令牌的更改:
onTokenRefresh()
请参阅此处的文档:https://firebase.google.com/docs/cloud-messaging/android/client#sample-register
答案 1 :(得分:0)
您无需检查令牌是否最新。方法
如果生成了新令牌,则始终会调用onTokenRefresh()
。
您需要做的是在调用onTokenRefresh()
时检查您的令牌是否已发送到您的服务器。