0

我正在使用Firebase雲消息傳遞向我發送iOS應用程序中的推送通知。我正在收聽我的AppDelegate中的kFIRInstanceIDTokenRefreshNotification通知。一旦應用程序委託獲取application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData)中的設備令牌,我的選擇器方法kFIRInstanceIDTokenRefreshNotification即被調用。Firebase雲消息傳遞未獲得第二次註冊

我的問題是,一旦用戶註銷並再次登錄,但是這次在application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData)中接收到設備令牌後,我的選擇器方法kFIRInstanceIDTokenRefreshNotification未被調用。

作爲觀察點,選擇器方法在第一次被調用後(即使用戶沒有註銷)不會被調用。

我在下面附上我需要的代碼。讓我知道是否有其他代碼部分是必要的。請有人可以解釋我在這裏出錯的地方。

class AppDelegate: UIResponder { 
     func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(tokenRefreshNotification(_:)), name: kFIRInstanceIDTokenRefreshNotification, object: nil) 
     return true 
     } 

     func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 
      FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Unknown) 
     } 

     func tokenRefreshNotification(notification: NSNotification) { 
      print("Called only first time") 
     } 

    func loginFirebaseWithFacebookAccessToken(accessToken: String) { 
      let credential = FIRFacebookAuthProvider.credentialWithAccessToken(accessToken) 
      if let user = FIRAuth.auth()?.currentUser { 
       user.linkWithCredential(credential) { (user, error) in 
        print("Sign in done") 
       } 
      } else { 
       FIRAuth.auth()?.signInWithCredential(credential) { (user, error) in 
        print("Sign in done") 
       } 
      } 
    } 

    func signOutFromFirebase() { 
     do { 
      try FIRAuth.auth()?.signOut() 
     } 
     catch { 
     } 
    } 
} 
+0

嗨,普拉薩德,我也面臨同樣的問題,它是否適合你的工作機會嗎? – Maheep

+0

@Maheep,我還沒有得到任何解決方案。 – Prasad

回答

0

您是否嘗試強制退出? 試試吧! FIRAUTH.auth()!signOut()

+0

是的。這是沒用的。 – Prasad

+0

我應該在哪裏使用這段代碼? – Maheep

1

其實我想這行,對我的作品: -

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

    [[FIRInstanceID instanceID] deleteIDWithHandler:^(NSError * _Nullable error) { 
     // Add observer for InstanceID token refresh callback. 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tokenRefreshNotification:) name:kFIRInstanceIDTokenRefreshNotification object:nil]; 
    }]; 
    return true; 
} 
相關問題