为什么我向主题发送 Firebase 通知的请求不起作用(HTTP POST)?



非常感谢对此的任何帮助..我只想使用我的php代码向订阅主题"global"的所有用户发送通知。有谁知道为什么它可能不起作用?由于我希望每个使用该应用程序的人都能收到通知,所以我会订阅所有人(除非有更好的方法)。这是我尝试将通知发送到我的全局主题的 php:

<?php
define( 'API_ACCESS_KEY', 'hidden...hidden' );
$msg = array
(
'message'   => 'here is a message. message',
'title'     => 'This is a title. title',
'vibrate'   => 1,
'sound'     => 1
);
$fields = array
(
'to'            => "/topics/global",
'data'          => $msg,
'priority'      => 'high'
);
$headers = array
(
'Authorization: key=' . API_ACCESS_KEY,
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
$result = curl_exec( $ch );
curl_close( $ch );
echo $result;
?>

我缺乏知识,但从$result回声来看,它看起来不像任何失败消息。这就是我得到的:

{"message_id":7591682951632927615}

在我的 Firebase 控制台中,我甚至看不到主题"全局",因此我无法测试发送到该主题是否适用于我的设备。从我在网上阅读的内容来看,订阅的主题可能需要一段时间才能出现在控制台中。澄清一下,使用设置为应用程序的用户细分向所有设备发送通知在控制台中工作!

我能做些什么来验证我的应用是否确实在为用户订阅"全局"主题?也许这就是问题所在。以下是相关的 swift 代码:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
FIRApp.configure()
if #available(iOS 10.0, *) {
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in })
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
// For iOS 10 data message (sent via FCM)
FIRMessaging.messaging().remoteMessageDelegate = self
} else {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}
application.registerForRemoteNotifications()
return true
}

func applicationReceivedRemoteMessage(_ remoteMessage: FIRMessagingRemoteMessage) {
print("applicationReceivedRemoteMessage")
}

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
if let refreshedToken = FIRInstanceID.instanceID().token() {
print("InstanceID token: (refreshedToken)")
FIRMessaging.messaging().subscribe(toTopic: "/topics/global")
}
}

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
// If you are receiving a notification message while your app is in the background,
// this callback will not be fired till the user taps on the notification launching the application.
/*
// Print message ID.
if let messageID = userInfo["gcmMessageIDKey"] {
print("Message ID: (messageID)")
}
// Print full message.
print(userInfo)
*/
}

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// If you are receiving a notification message while your app is in the background,
// this callback will not be fired till the user taps on the notification launching the application.
if application.applicationState == UIApplicationState.active {
print("GOT IN HERE")
var pushNotificationMessage = ""
if let aps = userInfo["aps"] as? NSDictionary {
if let alert = aps["alert"] as? NSDictionary {
if let message = alert["message"] as? NSString {
pushNotificationMessage = message as String
}
} else if let alert = aps["alert"] as? NSString {
pushNotificationMessage = alert as String
}
}
let notificationAlert = UIAlertController(title: nil, message: pushNotificationMessage, preferredStyle: .alert)
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: {
(alert: UIAlertAction!) -> Void in
})
defaultAction.setValue(Constants.activePushNotificationOKColor, forKey: "titleTextColor")
notificationAlert.addAction(defaultAction)
self.window?.rootViewController?.present(notificationAlert, animated: true, completion: nil)
}
}

要发送notification,请将参数存储在notification中,而不是数据中:

$fields = array
(
'to'            => "/topics/global",
'notification'  => $msg, // <= CHANGED
'priority'      => 'high'
);

另请查看通知有效负载支持文档中的表 2amessage不受支持,请改用body

$msg = array
(
'body'      => 'here is a message. message', // <= CHANGED
'title'     => 'This is a title. title',
'vibrate'   => 1,
'sound'     => 1
);

最新更新