解析服务器(自托管)不使用 FCM 发送 android 通知
Posted
技术标签:
【中文标题】解析服务器(自托管)不使用 FCM 发送 android 通知【英文标题】:Parse server (self hosted) not sending android notification with FCM 【发布时间】:2017-06-13 11:10:41 【问题描述】:您好,我在数字海洋上有自托管解析服务器,它在 ios 上发送通知,但在 android 上不发送。我的 index.js 文件如下所示:
var api = new ParseServer(
databaseURI: databaseUri || 'mongodb://1.1.1.1"1/app_name',
cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
appId: 'abc',
masterKey: 'def',
serverURL: 'http://1.1.1.1:1337/parse' || 'http://localhost:1337/parse',
verbose: true,
push:
android:
senderId: 'my FCM id',
apiKey: 'my FCM key'
,
ios:
pfx: '1',
bundleId: '2',
production: true
);
当我从解析仪表板(也是自托管的)发送推送时,这是我得到的响应 verbose:true:
"results": [
"objectId": "bNtZqwY8",
"pushTime": "2017-06-13T10:49:06.095Z",
"query": "\"UniqueId\":\"c49de788ce\",\"deviceType\":\"$in\":[\"android\"]",
"payload": "\"alert\":\"Thank you for using my app.\"",
"source": "rest",
"status": "succeeded",
"numSent": 0,
"pushHash": "266b6b637152b36040830",
"createdAt": "2017-06-13T10:49:06.095Z",
"updatedAt": "2017-06-13T10:49:06.214Z",
"numFailed": 15,
"failedPerType":
"android": 15
,
"ACL":
,
"objectId": "rsYinvGG",
"pushTime": "2017-06-13T10:48:42.449Z",
"query": "\"UniqueId\":\"7A0A-9AEA-5870FDEC42A3\"",
"payload": "\"alert\":\"one\",\"link_key\":1,\"sound\":\"default\"",
"source": "rest",
"status": "succeeded",
"numSent": 2,
"pushHash": "246431e019c0357dcb180c7",
"createdAt": "2017-06-13T10:48:42.449Z",
"updatedAt": "2017-06-13T10:48:43.282Z",
"numFailed": 0,
"sentPerType":
"ios": 2
,
"ACL":
,
当我从 FCM 在 android 上发送推送时,它可以工作。我真的迷失在 android push 上,有人能指出我正确的方向吗?
这是日志的输出:
ESC[36mverboseESC[39m: REQUEST for [PUT] /parse/classes/_Installation /zKIp8LLOWr:
"GCMSenderId":"diMV6Hm3j07dbqVPEsZRgqNzDo3YvA5zNdUmtO6Q4ka5ijRyyIRHiWCWOBVBDA22OIls-4bO06kxDPuOKFwJUZuMD3Xt41WuKUoOJwBlW7cKdqv9llj7Me0uiWFLWDwS7V",
"UniqueId": "a59020fff8ca30d00",
"appVersion": "2.3.3",
"objectId": "zKIp8LLOWr"
method=PUT, url=/parse/classes/_Installation/zKIp8LLOWr, x-parse- app-display-version=2.3.3, x-parse-installation-id=29918e2f-8bbd-4ab7-975f-f854e1f43689, user-agent=Parse Android SDK 1.13.1 (com.mrfizzy/18) API Level 21, connection=Keep-Alive, accept-encoding=gzip, x-parse-os-version=5.0, x-parse-app-build-version=18, content-type=application/json, x-parse-client-key=, x-parse-client-version=a1.13.1, host=46.101.199.219:1337, content-length=245, x-parse-application-id=JHyfl9YhXCQ24r6J8ohdVlHLt1hfWhB4MF2jQAQn, GCMSenderId=diMV6HmLH3I:APA91bFQS4Sq9G5wlej07dbqVPEsZRgqNzDo3YvA5zNdUmtO6Q4ka5ijRyyIRHiWCWOBVBDA22OIls-4bO06kxDPuOKFwJUZuMD3Xt41WuKUoOJwBlW7cKdqv9llj7Me0uiWFLWDwS7V, UniqueId=a59020a48ca30d00, appVersion=2.3.3, objectId=zKIp8LLOWr
ESC[31merrorESC[39m: Error generating response. ParseError code: 101, message: 'Object not found for update.' code=101, message=Object not found for update.
[object Object]
【问题讨论】:
在本地运行,这样您就可以看到具体的错误。推送失败的原因有很多,所以很难说没有错误。 用日志输出更新问题。 【参考方案1】:您似乎没有正确分配发件人 ID。您传递的 objectId 似乎不正确。确保在设置 GCM 发件人 ID 时使用ParseInstallation.getCurrentInstallation()
,而不是尝试通过任何其他方式进行安装。
http://parseplatform.org/Parse-SDK-Android/api/com/parse/ParseInstallation.html#getCurrentInstallation()
【讨论】:
我没有使用 GCM,我在我的 index.js 文件中使用 FCM senderId 和 apiKey,如问题顶部所示。我在该文件的任何地方都没有看到这一行ParseInstallation.getCurrentInstallation()
。这会在应用程序中吗?我认为应用程序很好,因为从 FCM 仪表板发送通知时会发出通知
阅读您的日志输出。该错误是因为没有找到具有您传递的正确 ObjectId 的对象,并且您还在 PUT 请求中设置了 GCMSenderId。您正在尝试保存一个不存在的对象。
您正试图保存与ID zKIp8LLOWr _Installation对象(这似乎并不存在,是用户的ObjectID吧?),和你传递GCMSenderId:diMV6Hm3j07dbqVPEsZRgqNzDo3YvA5zNdUmtO6Q4ka5ijRyyIRHiWCWOBVBDA22OIls-4bO06kxDPuOKFwJUZuMD3Xt41WuKUoOJwBlW7cKdqv9llj7Me0uiWFLWDwS7V。错误消息中显示“找不到对象”,这意味着没有_Installation 对象具有objectId zKIp8LLOWr
仍然没有运气,我不再收到该对象丢失错误,这是我现在得到的响应:results=[objectId=jVctUq1lKv, pushTime=2017-06-14T10:18:19.030Z, query="UniqueId":"c34f81f49de788ce","deviceType":"$in":["android"], payload="alert":"Tabib", source=rest, status=succeeded, numSent=0, pushHash=25e44ea99f48ca8a9c54ff1ef578bdbc, createdAt=2017-06-14T10:18:19.030Z, updatedAt=2017-06-14T10:18:19.233Z, numFailed=16, android=16, ]
它说失败 16 但没有说明失败的原因
你确定你有发送者ID和API密钥吗?卸载会失败。如果您从本地服务器运行推送,它会显示每次发送尝试的错误,因此您可以具体查看出了什么问题。我会清除您的安装,重新安装您的应用,然后使用新数据重试。以上是关于解析服务器(自托管)不使用 FCM 发送 android 通知的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Google FCM 和 Microsoft azure 作为托管服务器从 chrome for android 上的 PWA 发送推送通知