2

我正在为一个项目使用 Firebase,并且我想使用推送通知。

有没有办法通过代码向我的应用程序的所有用户发送推送通知,即不使用控制台?

我使用 Cloudkit 和 CKSubscritpitons 完成了这项工作,我想知道是否有办法在 Firebase 中做类似的事情。

谢谢!

4

2 回答 2

2

通知控制台用于向用户组发送通知。

如果您想以编程方式发送通知,请查看Firebase Cloud Messaging。这将要求您在受信任的进程(例如服务器)中运行代码。

于 2016-05-25T15:19:25.740 回答
2

无需 CocoaPods 即可集成

首先阅读 Firebase 文档。=> Firebase 文档

  1. 在此处在 Firebase 上注册项目 => 在此处注册项目
  2. 从这里获取 GoogleService-Info.plist 文件=> 项目=> 设置 => 常规
  3. GoogleService-Info.plist 文件放在您的项目中。
  4. 在 Firebase 中设置 Notification .p12 证书(生产和开发)=> 项目=> 设置 => 云消息传递
  5. 在此处下载 Firebase SDK => Firebase SDK 下载
  6. 在您的项目中创建 SDK 文件夹并将所有 SDK 文件夹放入其中。
  7. 现在在你的 Xcode 中添加这个框架 => libicucore.tbd
  8. 在 Xcode 中设置后台模式 => 项目 => 功能 => 后台模式打开 => 远程通知
  9. 添加 Info.Plist 文件FirebaseAppDelegateProxyEnabled Set BOOL NO

在此处输入图像描述

在 Objective-c 中你的 Appdelegate.m 文件

#import "AppDelegate.h"
#import "Firebase.h"
#import "AFNHelper.h"

@interface AppDelegate (){

    NSString *InstanceID;
}
@property (nonatomic, strong) NSString *strUUID;
@property (nonatomic, strong) NSString *strDeviceToken;
@end
@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    UIUserNotificationType allNotificationTypes =
    (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
    UIUserNotificationSettings *settings =
    [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    [[UIApplication sharedApplication] registerForRemoteNotifications];

    [FIRApp configure];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tokenRefreshNotification:) name:kFIRInstanceIDTokenRefreshNotification object:nil];

    return YES;
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

    NSLog(@"Message ID: %@", userInfo[@"gcm.message_id"]);
    [[FIRMessaging messaging] appDidReceiveMessage:userInfo];

    NSLog(@"userInfo=>%@", userInfo);
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

    [[FIRInstanceID instanceID] setAPNSToken:deviceToken type:FIRInstanceIDAPNSTokenTypeProd];
    NSLog(@"deviceToken1 = %@",deviceToken);

}
- (void)tokenRefreshNotification:(NSNotification *)notification {
   NSLog(@"instanceId_notification=>%@",[notification object]);
    InstanceID = [NSString stringWithFormat:@"%@",[notification object]];

 [self connectToFcm];  
}

- (void)connectToFcm {

[[FIRMessaging messaging] connectWithCompletion:^(NSError * _Nullable error) {
    if (error != nil) {
        NSLog(@"Unable to connect to FCM. %@", error);
    } else {

        NSLog(@"InstanceID_connectToFcm = %@", InstanceID);
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{

            dispatch_async(dispatch_get_main_queue(), ^{
                [self sendDeviceInfo];
                NSLog(@"instanceId_tokenRefreshNotification22=>%@",[[FIRInstanceID instanceID] token]);

            });
        });


    }
}];}
于 2016-07-13T12:00:51.353 回答