Push notification support in Twilio IOS sdk - objective-c

I'm trying to get push notifications on an app that's using Twilio IP Messaging. After following the instructions on twilio guides.
The AppDelegate functions to register for remote notifications is working well - the iOS devices successfully provides the device token to the Twilio Client. However, the TwilioIPMessagingClient gives no indication of success or failure while registering the token.I have used delegates also for that Moreover, I don't get any sign of push notifications when messages get sent.
I have checked logs also where I can see the correct logs:
TNNotificationClient | Starting registration..., id: <....>
TNRegTransport | Creating registration: apn - <....>
TNRegTransport | Registration is created, location: https://ers.us1.twilio.com/v1/registrations/<...>
Where exactly I'm missing? One hint I got to know after much research that in server PHP app, I need to enable push on IPMesaging services client becuase its disabled by default. If yes, where exactly or in which .php file I have to enable it?
Reference:
https://www.twilio.com/docs/api/ip-messaging/guides/push-notification-configuration

Someone else recently solved this problem realizing that they had not set the New Message notification type to be explicitly enabled as follows from the PHP example:
// Update the service webhooks
$service = $client->services->get("YOUR_IP_MESSAGING_SERVICE_SID");
$response = $service->update(array(
"Notifications.NewMessage.Enabled" => "true",
"Notifications.NewMessage.Template" => "A New message in ${CHANNEL} from ${USER}: ${MESSAGE}",
));
?>
Would this solve it for you?

Related

'Code:Messaging/Incorrect-GCM-sender-id' error message in browser

In my web application i was taking GCM ids. Now to move to FCM, we added the code to get the token generated and also changed the sender id in manifest.
In our case, since we lost the old gmail id associated with our old GCM token, we are using a new account & new FCM key.
Getting the below error:
Unable to get permission to notify. Or {code:
"messaging/incorrect-gcm-sender-id", message: "Messaging: Please change
your web app manifest's '…e messaging.
(messaging/incorrect-gcm-sender-id).", stack: "FirebaseError: Messaging:
Please change your web
a…gstatic.com/firebasejs/5.9.3/firebase.js:1:29212)"} code:
"messaging/incorrect-gcm-sender-id" message: "Messaging: Please change
your web app manifest's 'gcm_sender_id' value to 'XXXXXXXXXXX' to use
Firebase messaging. (messaging/incorrect-gcm-sender-id)." stack:
"FirebaseError: Messaging: Please change your web app manifest
I think you'll need to unregister any current subscriptions and re- subscribe the user.

IBM MobileFirst (MFP 8) weird behavior on isSuccessful response field

Our application have been running in production for about 6 months now. Suddenly we experience weird errors in our mobile app. We found out from the logs that there was a sudden change in the behavior of the response thrown by MFP.
Our MFP adapter interfaces to the app on one side, and connects to REST web services in the back end side.
Before, the behavior was like the one below. isSuccessful returns "true" even if HTTP status code returned from the REST web service was any other http code besides 200.
{
"statusCode":401,
"errors":[
],
"isSuccessful":true,
}
Now, if the status code is not 200, isSuccessful is showing false. We did not change anything in the MFP adapter code nor made any changes in MFP as well. This causes our application to behave in a different way than before.
{
"statusCode":401,
"errors":[
],
"isSuccessful":false,
}
Does anyone know the reason for this sudden change in behavior? we want to return the behavior as how it was before.
Mobile App will receive an 401 HTTP Status code whenever the user invokes an adapter endpoint with invalid Access token.
Check whether you have protected your Adapter Endpoint Custom OAuth Scope with any Security Check in Mobilefirst Operations Console.
If not, MFP SDK will handle this error and obtain's a fresh access token for default OAuth Scope and returns the adapter response.

Safari Push notification is not working

I have been trying Safari push notification. I followed the Apple doc.
Downloaded Apple intermediate Certificate AppleWWDRCA.cer. Exported my website provisioning profile as p12. To create the push Package used ruby package push_package
It created a package zip and it contains all the details that we needed - icon.iconset, manifest.json, signature and website.json.
When I request permission it successfully retrieves all data and gives me token.
But the real problem is when I try to send notification from a PHP script or APN tester its not receiving in the safari. The v1/logs getting called instead with some circular Json object.
Have no idea what to do next. can anyone please help ??
And one more thing I found is, in the logs SafariNotificationAgent (unknown version)
The error was in payload that I used.
It should be like:
{
"aps":{
"alert":{
"title":"Hi there",
"body":"How are you",
"action":"viewed"
},
"url-args":[""]
}
}

Any way to get more details on GCM failure?

I'm currently working on a push notification API that will work with several apps at once, handling notifications and reducing programming time for future apps. It's already partially working, as I'm able to register and receive notifications on Android devices.
Eventually, one of our apps is gonna send broadcast notifications to registered users. But some tokens might be expired, which will lead to a GCM failure. I already tested, and it seems that sending an array of tokens to GCM with a single http call is working really well, as devices with valid tokens got their notifications.
What I wasn't able to find searching GCM documentation was a way to get more details in case of failure. For example, when I send a notification to two users, one with a valid token and the other with an invalid one, I got this result :
{
"multicast_id":7625209716676388798,
"success":1,
"failure":1,
"canonical_ids":0,
"results":[
{"error":"InvalidRegistration"},
{"message_id":"0:1466511379030431%c4718df8f9fd7ecd"}
]
}
We can see that one of the messages failed to send, but what I'm looking for is a way to get more details, ideally the token that leads to a failure, so I can remove it from my database.
Any way to achieve that ? Using the message_id maybe ? Or is there any solution for me to find invalid tokens stored in my database so I can clear them ? I might have missed something in the documentation, even a link to it would be useful.
Based from this documentation, the GCM server will respond to your server with some information about the token you used to try to send the push notification.
According also to this link, if the app server fails to complete its part of the registration handshake, the client app should retry sending registration token to the server or delete the registration token. Wiping old tokens from the GCM servers can be done with ÌnstanceID.deleteToken().
Check these links:
How to remove gcm id from server which is not used
GCM get invalid tokens when sending to multiple devices at once

Receive offline message with XMPP

I am working on a chat app using XMPP Protocol.
I tried following
this tutorial from github . Everything is working fine using
XMPP.
But I'm unable to receive offline messages when user comes
online.
As user A is logged out and user B sends messages to user A, and when user A logs into app, it must receive all the messages that
were sent by user B during offline session.
How can I receive these offline messages?
My app is totally stuck on this issue. Please help if anyone
knows the solution. Any help will be appreciated. Thanks
You need to enable mod_offline on server, if you are using ejabberd XMPP Server.
Here is the code needs to enable module:
ignore_pep_from_offline: true
max_user_offline_messages:
admin: 5000
all: 100
mod_offline:
access_max_user_messages: max_user_offline_messages
Write this code in ejabberd.yml config file.
It will store unto 100 messages per user received when client was offline.
At client side, you may have to register for service:
'http://jabber.org/protocol/disco#info'
If you done this, whenever offline client gets online, server will send those stored messages to respective client.
You've to send Request for offline message if server supports. XMPP works on TCP protocol so as soon as client is up, it should send request to server.
<iq type='get'>
<query xmlns='http://jabber.org/protocol/disco#info'
node='http://jabber.org/protocol/offline'/>
</iq>