2015-10-13 11 views
9

リモート通知を登録するときにデバイストークンを受信できません。私は警告メッセージ"Do you want to allow App X to be able to send you notificaitons"を受け取りますが、それを受け入れるとdidRegisterForRemoteNotifications関数は呼び出されません。私は次のコードを試しました。Swiftでリモート通知を登録するときにデバイストークンを取得する方法

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // Override point for customization after application launch. 

    var types: UIUserNotificationType = UIUserNotificationType.Badge | 
     UIUserNotificationType.Alert | 
     UIUserNotificationType.Sound 

    var settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: types, categories: nil) 

    application.registerUserNotificationSettings(settings) 
    application.registerForRemoteNotifications() 

    return true 
} 

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 

    var characterSet: NSCharacterSet = NSCharacterSet(charactersInString: "<>") 

    var deviceTokenString: String = (deviceToken.description as NSString) 
     .stringByTrimmingCharactersInSet(characterSet) 
     .stringByReplacingOccurrencesOfString(" ", withString: "") as String 

    println(deviceTokenString) 

} 

私のプロビジョニングプロファイルと証明書は整然としたものです。

他に誰かがこの問題を抱えていますか?

+0

は、あなたが登録に失敗し、それが呼び出されるかどうかを確認する際のコールバックを実装したことがありますか? – dan

+0

登録に失敗したのに代理メソッドを適用しましたが、呼び出していません –

+0

これと同じ問題が発生しましたか? –

答えて

2

私はデバイスでアプリをしばらく実行していましたが、application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) が青色で呼び出され、今は魅力的に機能しています。なぜこのようなことが起きたのか、プッシュ通知を構成するように構成するためにバックグラウンドで実行されている証明書やその他すべての作業にはちょうど時間がかかりました。だから、同じ問題を抱えている人は、時間を与えてからそれに戻ってくることをお勧めします。私の場合、助けがあれば約12時間かかりました。

2

昨日のようにサンドボックスapnsがダウンしている場合、その時点でデリゲートはデバイストークンのために呼び出されません。

0
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 
if([[UIDevice currentDevice] systemVersion].floatValue >= 8.0) 
{ 
    UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]; 
    [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];  
} 
else 
{ 
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound|UIRemoteNotificationTypeBadge)]; 
} 
} 


- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{ 
      //Your device token code 
} 

方法の下に実装して、チェックしてみてください:

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings 
{ 
    //register to receive notifications 
    [application registerForRemoteNotifications]; 
} 

//For interactive notification only 
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler 
{ 
    //handle the actions 
    if ([identifier isEqualToString:@"declineAction"]){ 
    } 
    else if ([identifier isEqualToString:@"answerAction"]){ 
    } 
} 
+2

人々に受け入れさせないあなたの答え。回答がOPに役立つ場合、彼らは受け入れます。しかし、あなたがOPの自己回答を読んだ場合、答えが自分の問題を解決していないことがわかります。 – JAL

+2

また、質問には「目的-c」ではなく「迅速」とタグ付けされています。スウィフトコードを投稿する必要があります。常に質問のタグに従ってください。 – Moritz

関連する問題