检查Google Play服务以接收Firebase推送通知的最佳做法

时间:2017-11-04 16:59:04

标签: android firebase push-notification google-cloud-messaging google-play-services

在我的Android应用中,我使用Firebase通知。据我所知,如果用户没有安装Google Play Services或配置正确,则无法接收通知。我有两个问题:

1-我说的是真的吗?如果Google Play Services未正确配置,用户无法接收Firebase通知吗?

2-我使用此方法检查用户是否有Google Play services,然后在Topics注册用户,依此类推......:

GoogleApiAvailability api = GoogleApiAvailability.getInstance();
int resultCode = api.isGooglePlayServicesAvailable(getApplicationContext());
if (resultCode == ConnectionResult.SUCCESS) {
    //register in a topic
    FirebaseMessaging.getInstance().subscribeToTopic("all");
}else{
    alert("You have to install Google Play Services")
}

这种方法是对的吗?我的主要目标是,如果用户无法注册Firebase消息,请了解原因并且不会出现任何错误。实际上,注册最大用户以接收Firebase消息没有任何问题。由于Google Play服务,我不希望自己的应用崩溃...

实现这些目标的最佳做法是什么?

1 个答案:

答案 0 :(得分:3)

这个答案是基于我的经验。

  

1-我说的是真的吗?如果Google Play服务配置不正确,则用户无法接收Firebase通知?

是。如果用户的手机没有Google Play服务,用户将不会收到任何通知,如果安装的Google Play服务已过期,用户也不会收到通知。

  

2-我使用此方法检查用户是否拥有Google Play服务,然后在主题中注册用户等等......:

这种方法对我来说似乎不错。您可以显示更新Google Play服务的提醒或安装它。尝试以下代码

  GoogleApiAvailability api = GoogleApiAvailability.getInstance();
  int resultCode = api.isGooglePlayServicesAvailable(getApplicationContext());
  if (resultCode == ConnectionResult.SUCCESS) {
    //register in a topic
    FirebaseMessaging.getInstance().subscribeToTopic("all");
  }else{
       //Any random request code
      int PLAY_SERVICES_RESOLUTION_REQUEST = 1000;
      //Google Play Services app is not available or version is not up to date. Error the
      // error condition here
      if (api.isUserResolvableError(result)) {
        api.getErrorDialog(this, resultCode ,
            PLAY_SERVICES_RESOLUTION_REQUEST).show();
      }else{
         alert("You have to install Google Play Services")
      }
}

在您的提醒中,您可以要求用户从Playstore或浏览器下载Google Play服务。大多数情况下else部分仅在设备不支持Google Play服务时触发。因此,在这种情况下,最好为此设备禁用FCM。

                String appPackageName = "com.google.android.gms";
                try {
                    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
                } catch (android.content.ActivityNotFoundException anfe) {
                    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
                }