2017-05-23 20 views
1

これに助けてくれて非常に感謝します。私がしたいのは、私のPHPコードを使ってトピック "グローバル"に登録したすべてのユーザーに通知を送ることです。それがうまくいかない理由を知っている人はいますか?アプリを使用している皆さんが通知を受け取るようにしたいので、よりよい方法がない限り、私は皆を購読します。ここに私のトピックグローバルに通知を送信しようとする私のPHPは次のとおりです。トピックへのFirebase通知の送信要求が機能していません(HTTP POST)。

<?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; 
?> 

私が知識を欠いているが、$結果からしています、それはどんな失敗メッセージのようには見えませんでしたエコー。これは私が得たものである:私はトピックに送信することは私のデバイス上で動作することをテストすることはできませんので、私のFirebaseコンソールで

{"message_id":7591682951632927615} 

が、私も「グローバル」のトピックを参照してくださいすることはできません。オンラインで読んだことから、購読しているトピックがコンソールに表示されるまでにしばらく時間がかかります。 明確にするために、アプリケーションに設定されたユーザーセグメントを使用してすべてのデバイスに通知を送信することは、コンソールで動作します!

私のアプリが実際にトピック「グローバル」にユーザーをサブスクライブしていることを確認するためにできることはありますか?たぶんこれが問題です。ここでは、関連する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) 
    } 
} 
+0

[このドキュメント](https://firebase.google.com/docs/cloud-messaging/http-server-ref)はわずかに異なるURLを使用します。 –

答えて

1

データ、notificationのパラメータを格納し、notificationをしませ送信するには:

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

Notification payload supportのドキュメントで表2aを見てください。 messageはサポートされていません。代わりにbodyを使用してください。 `fcm`代わりに` gcm`:

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

ありがとうございました。私はgcmとして残しました(fcmは何らかの理由で404エラーを出していたので)。しかし通知に変更した後、ある程度は機能します。私はトピックが機能していることを確認することができましたが、奇妙なことに私は通知の音だけを得ています。 –

+0

私の答えの更新を参照してください。 –

+0

私の問題を解決しました。ボブありがとうございました。 –

関連する問題