2017-05-23 45 views
1

プッシュ通知にFirebaseを使用しようとしています。しかし、私はブロックを打った、つまり、私はiOSでそれを行うことができませんでした。私は、インポートFirebaseと第二Firebase:デバイストークンをFCMトークンに変換する方法

application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) 

で両方

Messaging.messaging().setAPNSToken(deviceToken, type: .prod) and InstanceID.instanceID().setAPNSToken(deviceToken, type: InstanceIDAPNSTokenType.sandbox) 

の二つのアプローチを試みました。

どうすればよいですか?

編集: これは補足情報です。エラーメッセージは次のとおりです。 デフォルトのトークンをフェッチできませんでしたError Domain = com.firebase.iid Code = 1003 "(null)" 私はグーグルではありますが、関連情報はありません。

+0

私は同じ問題を抱えていますが、答えを投稿してください。 –

答えて

5

だからあなたは近くにいる。ここでは、application.registerForRemoteNotifications()を呼び出すと、iOSのは、ただの老いたiOSアプリのように、のAPNs証明書を要求します

  1. ...クラウドメッセージングのFirebase 4.0バージョンでは今何が起こるかです。

  2. メソッドスウィズルをオフにしていないと仮定すると、Firebaseは自動的にそのAPNトークンをFCMトークンと交換します(スウィズルされたdidRegisterForRemoteNotificationsWithDeviceTokenメソッド)。

  3. が交換された場合、Firebaseはアプリに知らせることができます。これは、これを行う唯一の方法は、タイプkFIRMessagingRegistrationTokenRefreshNotificationのNSNotificationを作成することでした。しかし、最近では、MessagingDelegateを通じてお知らせすることもできます。だから、一番簡単な方法は...呼び出すことによって、あなたのAppDelegate

    Messaging.messaging().delegate = self 
    

    をメッセージングデリゲートを宣言することです...そしてmessaging(_:didRefreshRegistrationToken)方法を実現します。だから、

    func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) { 
        print("Look! I have an FCM token! \(fcmToken)") 
    } 
    

TL; DRはあなたがトークンを手動でFCMのためのAPNトークンを交換する必要がないということです、あなただけのFCMライブラリがこれを行うときに通知されるように、あなたのデリゲートを設定する必要がありますあなたのために。

+0

あなたが答える前に、私の設定はうごめいていました!ですから、私はすべてのことを処理しなければなりませんでしたが、今度は私の 'AppDelegate'クラスをオフにして、あなたのアドバイスに従って' MessageDelegate'クラスに準拠させます。そして 'messaging(_:didRefreshRegistrationToken)'では、私は初期化を書きました。しかし、 'application.registerForRemoteNotifications()'の実行後に 'messaging(_:didRefreshRegistrationToken)'は呼び出されません。それでも私の 'アプリケーション(アプリケーション:UIApplication、didRegisterForRemoteNotificationsWithDeviceToken deviceToken:Data)'が呼び出されます。どうして? –

+0

私は同じ問題を抱えていますが、メソッドスウィズルをオフにしました。ドキュメントには、 'didRefreshRegistrationToken'はIOS 10+でのみ使用できます。以下のバージョンではどうすればいいですか?' Messaging.messaging()を使用しました。 'connect'と' disconnect'メソッドの代わりに 'shouldEstablishDirectChannel = true'を使用していますが、' Notification.Name.MessagingRegistrationTokenRefreshed'から通知を受け取ることはできません。 –

関連する問題