如何为IOS制作Firebase推送通知
制备
- 有一个反应性项目
反应本机初始化
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