谷歌服务:如何处理没有谷歌Play的设备?

28

Google Play服务是一个Android库,其目标是提供:

  • OAuth 2.0身份验证
  • Google+登录
  • Google+ +1按钮
  • 各种其他实用工具

如果我要使用它(例如因为我想使用Google+登录),那么设备上没有安装Google Play的用户会发生什么情况?(Nook、Cyanogenmod、China Mobile、旧设备、也许是华为?等)

问题: 我的应用程序会在这些设备上变得不兼容吗?它会被列为兼容但随后崩溃或无法工作吗?
在使用Google Play服务时有没有最佳实践需要考虑?

5个回答

30
GooglePlayServicesUtil.isGooglePlayServicesAvailable(android.content.Context)

已经过时了!

使用:

 GoogleApiAvailability api = GoogleApiAvailability.getInstance();
        int code = api.isGooglePlayServicesAvailable(activity);
        if (code == ConnectionResult.SUCCESS) {
           // Do Your Stuff Here
        } else {
           AlertDialog alertDialog =
                 new AlertDialog.Builder(activity, R.style.AppCompatAlertDialogStyle).setMessage(
                       "You need to download Google Play Services in order to use this part of the application")
                       .create();
           alertDialog.show();
        }

4
无需创建自己的对话框,使用GoogleApiAvailability.getInstance().getErrorDialog(activity, code, 0).show()。 - Kyle

26
如果您的应用程序需要Google Play服务中的功能,则无法使您的应用程序工作。您可以使用GooglePlayServicesUtil.isGooglePlayServicesAvailable(android.content.Context)检查服务是否可用,如果可用,则会返回ConnectionResult.SUCCESS。现在,您可以尝试说服用户安装它(如果可能的话),或禁用使用服务的功能。由于Google Play服务不是在清单中声明的功能,因此您的应用程序应该可以在任何设备上正常安装,但是如果您在没有检查API是否可用的情况下使用它们,则可能会在之后崩溃。您可以使用模拟器进行测试。只需创建一个没有Google API的AVD并将您的应用程序放在其中即可。

3
该方法已被移动和废弃。请参见@Maxi在下面给出的新方法:https://dev59.com/_WYs5IYBdhLWcg3wDPet#34943703 - karl

1
正如其他人所说,您的代码最好检查Google移动服务。如果不这样做,它将崩溃,并包装一个android.content.ActivityNotFoundExceptionjava.lang.RuntimeException,因为您将在不存在的活动上调用函数。
好的应用程序不会崩溃,而是像其他答案建议的那样在所有依赖play服务的地方向用户发送通知。如果可能,仅向用户发送单个通知,而不是在每个依赖play服务的地方都向他们发送相同的通知 - 或在解释为何关闭应用程序的对话框后关闭应用程序。
更好的应用程序(例如Signal)包含处理诸如通知之类的事物的替代逻辑,而不是使play服务成为硬性要求。
您可以使应用程序在多大程度上在没有play服务的情况下工作,几乎完全取决于您的用例。例如,如果您使用Firebase,很难使应用程序在没有GMS的情况下工作。
在大多数情况下,可以避免使用GMS,在某些情况下,这可能不是最佳选择(例如允许用户在约会应用程序中使用任意位置)。
在锁定自己之前,请尝试寻找替代方案:OpenStreetMap将在比Google Maps更多的设备上工作,但在某些地区不如Google Maps完整(但足以选择交付位置)。
建议使用GMS来自Google。如果不需要使您的代码库加倍,我个人建议您支持更多的设备、供应商和操作系统。

0
如果您需要使用Play服务或者维护一个调用Play服务的旧版应用程序,那我建议您采取以下策略:
  1. 在应用启动时,检查Play服务是否可用
  2. 如果不可用,将Play服务调用重定向到microG

microG是Google Play服务的开源实现。
它缺少许多功能,但正在积极开发中。许多功能仍然是存根。

对于位置服务,还有LOST, 它是Google Play服务位置API的替代品。

您的应用程序可能不能完美地工作,但至少比崩溃好。

当然,最好从一开始就不要使用Google Play服务。


0

如果您的应用程序使用了GMS功能,例如Google登录或Firebase云消息传递,则在没有GMS的设备上它将无法正常工作。

建议在设备支持GMS时使用GMS;否则,请使用HMS(华为移动服务)。

请参考以下链接:

因此,您可以在支持GMS的设备上使用Google+登录;否则,请使用华为帐号登录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接