You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Kotlin创建AWS SNS推送Platform Endpoint的实现咨询

问题解答

结论先说:创建SNS Platform Endpoint这个操作100%应该放在服务端完成,不要在移动端直接调用SNS接口实现。

为什么不建议移动端直连创建

  • 调用SNS的CreatePlatformEndpoint接口必须持有对应操作权限的AWS访问凭证(AK/SK),如果把凭证硬编码在APK里,只要被反编译拿到,攻击者要么批量刷接口给你造出几十万无效Endpoint产生离谱的AWS账单,要么甚至能给你的全量用户推恶意通知,安全风险根本兜不住。
  • 放服务端统一处理的话,你可以顺手做设备注册去重、过期Endpoint自动清理、用户和设备的绑定关系维护,后续要是换推送通道、调整推送逻辑,也不用逼着用户升级APP。

移动端Kotlin侧真正要写的逻辑

你完全不需要在移动端写任何直接操作SNS的代码,只需要拿到FCM生成的设备注册令牌,上报给你自己的业务服务端就行,参考实现:

class MyAppFirebaseMessagingService : FirebaseMessagingService() {
    override fun onNewToken(fcmToken: String) {
        super.onNewToken(fcmToken)
        // 切IO协程把token传给自有服务端
        CoroutineScope(Dispatchers.IO).launch {
            runCatching {
                // 替换成你自己服务端的上报接口
                appApi.uploadPushToken(
                    deviceId = Settings.Secure.getString(contentResolver, Settings.Secure.ANDROID_ID),
                    fcmToken = fcmToken
                )
            }.onFailure {
                // 上报失败就把token存到本地,等下次网络正常再补报
            }
        }
    }
}

服务端对应要做的事

服务端收到移动端传上来的FCM令牌后,先校验下当前请求的用户身份,再调用对应语言的AWS SNS SDK发起CreatePlatformEndpoint请求:传入你提前在SNS控制台建好的PlatformApplication对应的ARN、收到的FCM令牌,还可以在CustomUserData字段存用户ID、设备标识这类自定义信息,创建成功后把返回的EndpointArn和用户、设备的映射关系存在自己的业务库就行,后续发推送直接用这个ARN定向发就可以。

附:移动端Kotlin直连创建Endpoint的调试代码(生产环境绝对禁用)

如果你只是本地调试想快速跑通流程,基于AWS Android SDK直连创建的核心代码如下,再强调一遍:生产环境别这么写,凭证漏了出事没人兜得住:

// 警告:端侧存放AWS凭证有极大安全风险,仅可用于本地调试
val snsClient = AmazonSNSClient(BasicAWSCredentials("你的AWS_ACCESS_KEY", "你的AWS_SECRET_KEY")).apply {
    setRegion(Region.getRegion(Regions.AP_SOUTHEAST_1)) // 替换成你自己SNS所在的区域
}

val createRequest = CreatePlatformEndpointRequest()
    .withPlatformApplicationArn("你在SNS控制台创建的PlatformApplication ARN")
    .withToken(fcmToken)
    .withCustomUserData("自定义用户/设备标记")

val result = snsClient.createPlatformEndpoint(createRequest)
val endpointArn = result.endpointArn // 拿到生成的Endpoint ARN

内容的提问来源于stack exchange,提问作者meazuri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 01:39:18