I have successfully created a PushTopic through the PHP Force Workbench running locally. Then, I monitor the results under the 'Streaming Push Topics' feature in Workbench.
Here is the PushTopic:
PushTopic pushTopic = new PushTopic(); pushTopic.Name = 'ContactUpdates'; pushTopic.Query = 'SELECT LastName, FirstName, MailingStreet, MailingCity, MailingState, MailingPostalCode, Id FROM Contact'; pushTopic.ApiVersion = 37.0; pushTopic.NotifyForOperationCreate = true; pushTopic.NotifyForOperationUpdate = true; pushTopic.NotifyForOperationUndelete = true; pushTopic.NotifyForOperationDelete = true; pushTopic.NotifyForFields = 'Referenced'; insert pushTopic;
Notice I am explicitly declaring NotifyForOperationUpdate. When I monitor this stream, I get notifications for the account creations, but not for the account updates. Specifically, I was updating the LastName and FirstName fields.
When I create a new PushTopic and specificy NotifyForFields as 'All', I am able to see updates.
I can certainly use 'All' with the significant downside of getting updates that do not matter to the application.
Question 1: Why does updating FirstName and LastName not work for 'Referenced' fields, but does work for 'All', since the query SELECT clause includes FirstName and LastName?
NOTE: this is not a duplicate of Streaming API : not getting updates for some standard fields as I am specifying explicit Apex options and for a different API version. However, the answer may be the same for both (which could be as simple as, "it is a bug in SalesForce Streaming API").