amplify-js: PushNotification.onRegister not generating a token. PushNotication from @aws-amplify/pushnotification doesn't have configure, onRegeister or onNotification methods on it?

** Which Category is your question related to? ** @aws-amplify/pushnotification

** What AWS Services are you utilizing? ** AWS PinPoint, Analytics

** Provide additional details e.g. code snippets ** “dependencies”: { “@aws-amplify/analytics”: “^1.2.10”, “@aws-amplify/pushnotification”: “^1.0.22”, “aws-amplify-react-native”: “^2.1.7”, “react”: “16.6.3”, “react-native”: “0.58.3” },

I followed the instructions on AWS-Amplify’s page to setup push notifications on React Native IOS but I noticed that I’m not getting a token back after some debugging noticed that Notification import is doesn’t have configure, onRegeister or onNotification methods

My App.js file

`import React, { Component } from “react”; import { StyleSheet, Text, View, PushNotificationIOS, } from “react-native”;

import aws_exports from “./aws-exports”; import Analytics from “@aws-amplify/analytics”; import PushNotification from “@aws-amplify/pushnotification”;

// PushNotification need to work with Analytics Analytics.configure(aws_exports); Analytics.enable(); PushNotification.configure(aws_exports);

type Props = {}; export default class App extends Component<Props> {

componentDidMount(){ console.log(‘PN’,PushNotification); // get the notification data when notification is received PushNotification.onNotification(notification => { // Note that the notification object structure is different from Android and IOS console.log(“in app notification”, notification);

  // required on iOS only (see fetchCompletionHandler docs: https://facebook.github.io/react-native/docs/pushnotificationios.html)
  notification.finish(PushNotificationIOS.FetchResult.NoData);
});

// get the registration token
PushNotification.onRegister(token => {
  console.log("in app registration", token);
});

// get the notification data when notification is opened
PushNotification.onNotificationOpened(notification => {
  console.log("the notification is opened", notification);
});

} render() { return ( <View style={styles.container}> <Text style={styles.welcome}>Welcome to React Native!</Text> <Text style={styles.instructions}>To get started, edit App.js</Text> </View> ); } }

const styles = StyleSheet.create({ container: { flex: 1, justifyContent: “center”, alignItems: “center”, backgroundColor: “#F5FCFF” }, welcome: { fontSize: 20, textAlign: “center”, margin: 10 }, instructions: { textAlign: “center”, color: “#333333”, marginBottom: 5 } }); `

About this issue

  • Original URL
  • State: closed
  • Created 5 years ago
  • Reactions: 5
  • Comments: 21 (1 by maintainers)

Most upvoted comments

after upgrading firebase dependencies in ‘android/app/build.gradle’ I had the same issue. I found the answer here - https://github.com/aws-amplify/amplify-js/pull/2916/files#diff-1d2098d70f6a43d881eee25b70f91adb

I update “@aws-amplify/pushnotification” and got the token so - import { NativeModules } from 'react-native'; NativeModules.RNPushNotification.getToken(token => console.log(token))

Seems that the function changed in the latest version, so now you need to pass an error callback also

NativeModules.RNPushNotification.getToken(
  token => console.log(token),
  err => console.log(err)
);

onRegister() in Android is never called, I can also confirm that.

onRegister() method calls once only, when the app/device is completely new.

You can read your device token from AsyncStorage.

import aws_export from 'aws_export' AsyncStorage.getItem('push_token' + aws_export.aws_mobile_analytics_app_id)

Why this issue was closed if it’s not solved?

I’m facing the same issue. Following @kolosov507 answer, I’m now able to retrieve the token 👍

I update “@aws-amplify/pushnotification” and got the token so - import { NativeModules } from ‘react-native’; NativeModules.RNPushNotification.getToken(token => console.log(token))

Thanks.

I have the same problem! onRerister method is never triggered. Any updates about this issue?

@viniciusfont did you put the configuration outside your component ?

How can you close an issue without a proper solution?

@viniciusfont did you put the configuration outside your component ?

I put it in the App.js outside the App class component

The device successfully appears at Pinpoint dashboard (as a endpoint without a address), but the @amplify/push_notifications module doesn’t get the FCM token to update the endpoint (neither onRegister is called)

import React from 'react'
import Amplify, { Auth, Analytics } from 'aws-amplify'
import PushNotification from '@aws-amplify/pushnotification'
import awsmobile from './aws-exports'

Amplify.configure(awsmobile)
Analytics.configure(awsmobile)
PushNotification.configure(awsmobile)

// get the notification data when notification is received
PushNotification.onNotification(notification => {
	// Note that the notification object structure is different from Android and IOS
	console.log('in app notification', notification)
})

// get the registration token
PushNotification.onRegister(token => {
	console.log('in app registration', token);
})

// get the notification data when notification is opened
PushNotification.onNotificationOpened(notification => {
	console.log('the notification is opened', notification);
})

class App extends React.Component {
	constructor(props) {
		super(props)
	}

        ...
}

The below solution worked for me for a while but not now

NativeModules.RNPushNotification.getToken(token => console.log(token))

Did anyone find another way?