如何将GCM/FCM包含在Android库模块中?

4

我无法为Android库生成google-services JSON文件,因为它要求提供应用程序ID。我知道如何在项目中添加它。


库没有应用程序ID。应用程序ID由您的库的使用者提供。只需包含依赖项即可。不要在库上应用Google服务插件。 - Eugen Pechanec
@Eugen 我想创建一个能够向用户显示通知的库。即使应用程序已经设置了GCM,我的库也应该能够生成一个不同于应用程序的GCM令牌(GCM服务器也将有所不同)。我的库应该是独立于应用程序的。 - NIJESH ku
2个回答

7

FCM客户端设置

库没有应用程序ID。应用程序ID由您的库的使用者提供。只需包含依赖关系即可,无需在库上应用Google服务插件。

您的客户端可能已经按照https://firebase.google.com/docs/cloud-messaging/android/client教程操作。这意味着您需要创建您的库的推送消息处理器,并将其委托给您的客户端处理工作。例如:

your.client.app.package.fcm.MyFirebaseMessagingService.kt

class MyFirebaseMessagingService() : FirebaseMessagingService() {
    override fun onMessageReceived(p0: RemoteMessage) {
        super.onMessageReceived(p0)

        // Your client's message handling.
        // ...

        // If not handled by client, delegate to library.
        AwesomeLibrary.processPushMessage(this, p0)
}

your.awesome.library.package.fcm.AwesomeLibraryFcm.kt

object AwesomeLibraryFcm {
    fun processPushMessage(context: Context, message: RemoteMessage) {
        // TODO Your job.
    }
}

如您所见,将Firebase连接到您的库完全由您的库的消费者处理。您不需要在客户端上直接操作Firebase。
FCM服务器设置
您需要一个应用程序ID来设置FCM。一个应用程序ID只能关联到一个Firebase项目,即您的库的消费者的项目。死结了。
如果您正在运行一个在线服务并需要代表您的客户发送推送消息,则需要让他们在Google Dev控制台中创建一个Server key(限制为您服务器的IP地址),并将其与Project ID一起上传到您的服务器。这将允许您的服务器发送推送消息。本质上,这是您的客户“允许您代表他们发送推送消息”的权限。
请注意潜在的安全风险和滥用您的服务。

1
答案中描述的FCM服务器设置可以概括为:“要求用户创建一个发送者ID/服务器密钥并将其提供给您”。FCM服务器设置还有第二种可能:
  1. 可以为您的库创建Firebase项目。
  2. 不要将google-service.json添加到库中..每个应用程序都应该添加自己的
  3. 您仍然可以使用API为库-Firebase项目的发送者ID创建令牌:firebaseInstanceId.getToken(“sender-id-2”,“FCM”)
  4. 对于客户端设置,上述说明是正确的。
- Diego Giorgini
@eugen 这正是我在做这件事之前所做的,而且我在问这个问题之前已经完成了。但我不想依赖我的客户端来推送通知。非常感谢你。 - NIJESH ku
@DiegoGiorgini 这就是我需要的。谢谢。 - NIJESH ku
@DiegoGiorgini 如果你有解决方案,请将其发布为答案,谢谢。 - Eugen Pechanec
Eugen:你的回答已经很清楚了。如果你喜欢,可以将我的评论添加到你的答案中。 - Diego Giorgini
1
@DiegoGiorgini 我的回答基于错误的前提,即您需要将Android应用程序ID与使用FCM的Firebase项目相关联。根据此文章,我是错的。请围绕您的“获取第二个发送者令牌”的想法提供完整的答案。 - Eugen Pechanec

1
我在库项目中集成了FCM,并在新的应用程序项目中使用了该库。我从库中复制了Google服务JSON文件,并将其粘贴到新的应用程序项目的应用模块中。在此之后,我修改了这个Google服务的json文件。我将"client_info"下的"package_name"重命名为应用程序包名称,然后就能够收到通知了。

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