如何为IOS制作Firebase推送通知

制备

  1. 有一个反应性项目
 反应本机初始化 
cd fcm

尝试先运行它以检查是否有任何错误。

 反应本机运行iOS 

如果没有错误,请继续下一步。 如果有,请检查Google以获取更多信息,通常没有错误。

2.安装React Native Firebase

 纱线添加反应本机火力 

转到Firebase控制台(https://firebase.google.com/console)并创建(或使用现有的)项目。

选择将Firebase添加到您的iOS应用。 或从您现有的应用程序中下载GoogleService-Info.plist文件(在这种情况下,请确保捆绑包值相同)。

在您的应用中记下捆绑包ID。 点击下一步。

然后下载GoogleService-Info.plist文件。

将该文件拖放到您的Xcode文件\项目名称文件夹中。

选择全部复制。

我的会是这样。

回到项目文件夹,在终端中开始编写这些命令。

 光盘ios 
荚初始化

打开您的Podfile并添加

  pod“ Firebase / Core” 

这是我的Podfile

  #取消注释下一行以定义项目的全局平台 
#platform:ios,'9.0'

目标'fcm'做
#如果您使用的是Swift或想使用动态框架,请取消注释下一行
#use_frameworks!

#fcm的豆荚
pod“ Firebase / Core”

目标'fcmTests'做
继承! :search_paths
#测试豆荚
结束

结束

目标'fcm-tvOS'做
#如果您使用的是Swift或想使用动态框架,请取消注释下一行
#use_frameworks!

#fcm-tvOS的广告连播

目标'fcm-tvOSTests'做
继承! :search_paths
#测试豆荚
结束

结束

保存文件并运行

 吊舱安装 

从那时起,您必须使用* .xcworkspace文件。

上帝要AppDelegate.m文件,它在这里

并在该文件中添加两行

  / ** 
  *版权所有(c)2015年至今,Facebook,Inc.。 
  * 
  *此源代码是根据MIT许可获得许可的,该许可位于 
  *此源树的根​​目录中的LICENSE文件。 
  * / 
  #import“ AppDelegate.h” 
  #import  
  #import  
  #import  
  @implementation AppDelegate 
  -(BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
  { 
  [FIRApp配置]; 
  NSURL * jsCodeLocation; 
  jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@“ index” fallbackResource:nil]; 
  RCTRootView * rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation 
  moduleName:@“ fcm” 
  initialProperties:无 
  launchOptions:launchOptions]; 
  rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f绿色:1.0f蓝色:1.0f alpha:1]; 
  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen] .bounds]; 
  UIViewController * rootViewController = [UIViewController新]; 
  rootViewController.view = rootView; 
  self.window.rootViewController = rootViewController; 
  [self.window makeKeyAndVisible]; 
 返回是; 
  } 
  @结束 

3.安装消息模块

向Podfile再添加一个

  pod“ Firebase /消息传递” 

所以我的会是这样

  #取消注释下一行以定义项目的全局平台 
#platform:ios,'9.0'

目标'fcm'做
#如果您使用的是Swift或想使用动态框架,请取消注释下一行
#use_frameworks!

#fcm的豆荚
pod“ Firebase / Core”
pod“ Firebase /消息传递”

目标'fcmTests'做
继承! :search_paths
#测试豆荚
结束

结束

目标'fcm-tvOS'做
#如果您使用的是Swift或想使用动态框架,请取消注释下一行
#use_frameworks!

#fcm-tvOS的广告连播

目标'fcm-tvOSTests'做
继承! :search_paths
#测试豆荚
结束

结束

 吊舱安装 

4.更新功能

在iOS中是必需的。 而且仅适用于拥有付费帐户的用户(抱歉)

在Xcode中,启用以下功能

  • 推送通知
  • 后台模式->远程通知
  • 钥匙串分享

5.安装通知

打开AppDelegate.m并添加一些

  / ** 
  *版权所有(c)2015年至今,Facebook,Inc.。 
  * 
  *此源代码是根据MIT许可获得许可的,该许可位于 
  *此源树的根​​目录中的LICENSE文件。 
  * / 
  #import“ AppDelegate.h” 
  #import  
  #import  
  #import  
  #import“ RNFirebaseNotifications.h” 
  #import“ RNFirebaseMessaging.h” 
  @implementation AppDelegate 
  -(BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
  { 
  [FIRApp配置]; 
  [RNFirebaseNotifications配置]; 
  NSURL * jsCodeLocation; 
  jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@“ index” fallbackResource:nil]; 
  RCTRootView * rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation 
  moduleName:@“ fcm” 
  initialProperties:无 
  launchOptions:launchOptions]; 
  rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f绿色:1.0f蓝色:1.0f alpha:1]; 
  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen] .bounds]; 
  UIViewController * rootViewController = [UIViewController新]; 
  rootViewController.view = rootView; 
  self.window.rootViewController = rootViewController; 
  [self.window makeKeyAndVisible]; 
 返回是; 
  } 
  -(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { 
  [[RNFirebaseNotifications实例] didReceiveLocalNotification:notification]; 
  } 
  -(void)应用程序:(UIApplication *)应用程序didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo 
  fetchCompletionHandler :(非空void(^)(UIBackgroundFetchResult))completionHandler { 
  [[RNFirebaseNotifications实例] didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler]; 
  } 
  -(void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { 
  [[RNFirebaseMessaging实例] didRegisterUserNotificationSettings:notificationSettings]; 
  } 
  @结束 

申请代码

转到App.js文件

  / ** 
*示例React Native应用
* https://github.com/facebook/react-native
*
* @格式
* @流
* /

从'react'导入React,{Component};
从'react-native'导入{Platform,StyleSheet,Text,View};
从'react-native-firebase'导入firebase
从'react-native-firebase'导入类型 {Notification,NotificationOpen};

const指令= Platform.select({
ios:“按Cmd + R重新加载,\ n” +“ Cmd + D或为开发菜单摇一摇”,
android:
“双击键盘上的R重新加载,\ n'+
“为开发人员菜单摇动或按下菜单按钮”,
});

导出默认类App扩展组件{
componentDidMount =异步()=> {
启用const =等待firebase.messaging()。hasPermission();
如果(启用){
//用户具有权限
}其他{
//用户没有权限
尝试{
等待firebase.messaging()。requestPermission();
//用户已授权
} catch(错误){
//用户已拒绝权限
alert('没有通知权限');
}
}

const notificationOpen:NotificationOpen =等待firebase.notifications()。getInitialNotification();
如果(notificationOpen){
//应用已通过通知打开
//获取被打开的通知触发的动作
const action = notificationOpen.action;
//获取有关已打开的通知的信息
const notification:通知= notificationOpen.notification;
如果(notification.body!== undefined){
警报(notification.body);
}其他{
看到的var = [];
alert(JSON.stringify(notification.data,function(key,val){
if(val!= null && typeof val ==“ object”){
如果(seen.indexOf(val)> = 0){
返回;
}
seen.push(val);
}
返回值
}));
}
firebase.notifications()。removeDeliveredNotification(notification.notificationId);
}

const channel = new firebase.notifications.Android.Channel('test-channel','Test Channel',firebase.notifications.Android.Importance。Max)
.setDescription('我的应用测试频道');

//创建频道
firebase.notifications()。android.createChannel(channel);
this.notificationDisplayedListener = firebase.notifications()。onNotificationDisplayed((notification:Notification)=> {
//根据需要处理您的通知
// ANDROID:远程通知不包含频道ID。 如果您想重新显示通知,则必须手动指定。
});
this.notificationListener = firebase.notifications()。onNotification((notification:Notification)=> {
//根据需要处理您的通知
firebase.notifications()
.displayNotification(notification);
});
this.notificationOpenedListener = firebase.notifications()。onNotificationOpened(((notificationOpen:NotificationOpen)=> {
//获取被打开的通知触发的动作
const action = notificationOpen.action;
//获取有关已打开的通知的信息
const notification:通知= notificationOpen.notification;
如果(notification.body!== undefined){
警报(notification.body);
}其他{
看到的var = [];
alert(JSON.stringify(notification.data,function(key,val){
if(val!= null && typeof val ==“ object”){
如果(seen.indexOf(val)> = 0){
返回;
}
seen.push(val);
}
返回值
}));
}
firebase.notifications()。removeDeliveredNotification(notification.notificationId);
});
}

componentWillUnmount(){
this.notificationDisplayedListener();
this.notificationListener();
this.notificationOpenedListener();
}

render(){
返回(

欢迎使用React Native!
要开始使用,请编辑App.js
{instructions}

);
}
}

const styles = StyleSheet.create({
容器: {
弹性:1,
justifyContent:“中心”,
alignItems:'中心',
backgroundColor:'#F5FCFF',
},
欢迎:{
fontSize:20,
textAlign:'居中',
保证金:10,
},
说明:{
textAlign:'居中',
颜色:“#333333”,
marginBottom:5,
},
});

6. APNS证书

在Mac OS X中启动“ 钥匙串访问”应用程序 ,然后选择“ 钥匙串访问”->“证书助手”->从“证书颁发机构”请求证书

输入电子邮件地址并选中“ 保存到磁盘 ”选项,然后单击继续

保存证书

转到网站:developer.apple.com/

登录,然后转到标识符>应用程序ID

转到您的应用程序(应该在此处,因为您选择了它在您的帐户中-步骤4)

单击编辑(我已经做到了,所以您的“推送通知”部分将与此图像不同)

转到开发SSL证书>创建证书。

点击继续

从宝贵的步骤中选择从“钥匙串访问”创建的证书文件,然后单击“继续”

点击下载并完成

双击下载的文件,它将在“钥匙串访问”中打开。 使用Apple Development IOS…选择文件,右键单击,选择“导出”

输入名称并保存

输入密码,然后单击确定

输入计算机管理员密码以完成该过程

转到Firebase控制台,在您的项目中,选择“设置”

转到云消息

在IOS上,选择您的捆绑应用,然后上传 APNs证书。 选择* .p12文件

完成了〜^^

IOS中的声音

如果您关心声音,请记住检查一下,因为如果声音配置不正确,默认版本将无法通过:

 通知 
.setSound(“默认”)

~~~

现在您可以使用

  • Fire Cloud消息控制台
  • 您的iPhone

我在github中的源代码在这里:https://github.com/yangnana11/react-native-fcm-demo

如果您想了解Android版本,请参考以下链接:https://medium.com/@yangnana11/how-to-set-up-firebase-notification-in-react-native-app-android-only-4920eb875eae