このスレッド に従いましたが、メソッドdidRegisterForRemoteNotificationsWithDeviceToken
はまだ呼び出されません:
ドキュメントは言う:
UIApplicationオブジェクトのregisterForRemoteNotificationsメソッドを呼び出した後、デバイスの登録が正常に完了すると、アプリはこのメソッドを呼び出します
didRegisterUser
は適切に表示されますが、did register notif
。
AppDelegateのコードは次のとおりです(アプリのバージョンは8.1です)。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//register notif
UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert |
UIUserNotificationTypeBadge |
UIUserNotificationTypeSound);
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes categories:nil];
[application registerUserNotificationSettings:settings];
return YES;
}
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
//register to receive notifications
[application registerForRemoteNotifications];
NSLog(@"didRegisterUser");
}
-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"error here : %@", error);//not called
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
/*
// Store the deviceToken in the current installation and save it to Parse.
PFInstallation *currentInstallation = [PFInstallation currentInstallation];
[currentInstallation setDeviceTokenFromData:deviceToken];
currentInstallation.channels = @[ @"global" ];
[currentInstallation saveInBackground];
*/
NSLog(@"did register notif");//not called
}
また、バックグラウンドモード-> info.plistのリモート通知もあります。
あなたのコードは正しいようです。小さな改善として、didRegisterUserNotificationSettingsメソッドを次のように書くことができます。
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
if (notificationSettings.types != UIUserNotificationTypeNone) {
NSLog(@"didRegisterUser");
[application registerForRemoteNotifications];
}
}
APN登録の失敗の原因となる構成の問題がある可能性があります。
プロビジョニングプロファイルにaps-environmentエントリが含まれていることを確認してください
プロビジョニングプロファイルに一意のアプリ識別子(「*」のない文字列)が設定されていることを確認してください。また、この正確な識別子をInfo.plistの「バンドル識別子」として使用する必要があります
初期インストール後にプッシュ機能を拒否した可能性があります。この場合、in-app-Push-alertは表示されず、設定アプリでプッシュを再度有効にする必要はありません。
別のデバイスを試してください。
長い調査の後、Apple側でのエラーまたは更新により2016年7月19日であることがわかりました。インターネット接続、デバイス、使用されるメソッドなどのすべての条件が完璧です。
確認のためにこのリンクを参照してください https://forums.developer.Apple.com/thread/52224
確認するには、他のアプリもご覧ください。私は数時間を無駄にしましたが、それが誰かを助けることを願っています。ありがとう。
2016年7月19日:-
Apple Developer form により、Sandbox APNS
に関する問題があります... Apple側からの問題がある可能性があるため、application:didRegisterForRemoteNotificationsWithDeviceToken:
やapplication:didFailToRegisterForRemoteNotificationsWithError:
などのデリゲートは呼び出されません。
APNS Sandboxの現在のステータスを確認するには このリンク ... APNS Sandboxが正常に機能し、正常に機能していることを確認してください... Appleから他のバグがあるかもしれません_側
したがって、メソッドが完璧で証明書が有効であるかどうか心配する必要はありません。これはApple側からの問題です。問題が解決するとすぐに、メソッドは完全に機能します(すべてがあなたの側から問題なければ)。
プロダクションは正常に機能していることに注意してください..問題はサンドボックスAPNSのみに関するものです。
この問題が発生し、最終的にApple開発者向けWebサイトでメモを見つけて、この問題を解決しました。
セクションのiOSに関する注意:「リモート通知の登録:
iOS注:セルラーまたはWi-Fi接続が利用できない場合、application:didRegisterForRemoteNotificationsWithDeviceToken:メソッドもapplication:didFailToRegisterForRemoteNotificationsWithError:メソッドも呼び出されません。 Wi-Fi接続の場合、これはデバイスがポート5223を介してAPNに接続できないときに発生することがあります。これが発生した場合、ユーザーはこのポートをブロックしていない別のWi-Fiネットワークに移動するか、iPhoneまたはiPadで待機できますセルラーデータサービスが利用可能になるまで。どちらの場合でも、デバイスは接続を確立でき、委任メソッドの1つが呼び出されます。
私のiPhoneはWifiのみで接続し、iPhoneを再起動してWiFi APに再接続すると、この問題は解決しました。
XCode 8.3.1以降
上記のすべてのオプションを試した後、デリゲートメソッドがまだ呼び出されない場合は、プロジェクトで確認してください。
under 'Capabilities', (next to General),
- Push Notifications option is turned ON`
- and under Background Modes, Remote Notifications is turned ON
私に恥!最も基本的なステップを忘れました:
すべての証明書を処理した後、ここからスタッフの指示を処理します。 https://www.pluralsight.com/guides/Swift/creating-ios-rich-Push-notifications
プッシュ通知を送信するためのツールは次のとおりです。 https://github.com/noodlewerk/NWPusher
フォースがあなたと共にいるように!
私の場合、iOS 9.3以降だと思います。 Localyticsを使用した場合、didRegisterForRemoteNotificationsWithDeviceTokenは呼び出されません。これをコードから削除する必要があります(ApplicationDidFinishLaunchingWithOption)[Localytics autoIntegrate:@ "xxxxx" launchOptions:launchOptions];
わかりました、皆さん、私はこのことを11時間連続でデバッグしているので、うまくいけば、この答えが誰かに役立つことを願っています。
同様のスレッドでEVERYTHINGが正しく設定され、Google Firebaseアナリティクスが統合されていて、didRegisterForRemoteNotificationsWithDeviceTokenメソッドがまだ呼び出されていない場合、これはデフォルトでGoogle Firebaseでスウィズルされるためである可能性があります。何らかの奇妙な理由により、FIRはトークンをGoogleに送信した後、元のメソッドに戻りません。修正するには
FirebaseAppDelegateProxyEnabled to NO (BOOL)
info.plistで。
私の場合、Charlesを介してすべてのデバイストラフィックをプロキシしていたため、これが発生していました。これを削除すると修正され、didRegisterコールバックが提供されました。
私にとっては、シミュレータでアプリを実行していました。プッシュトークンはシミュレータ用に生成されないため、didFailToRegisterForRemoteNotificationsWithError
の代わりにdidRegisterForRemoteNotificationsWithDeviceToken
を入力していました
以下のコードを追加してください、それは私のために働いています、
#ifdef __IPHONE_8_0
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
//register to receive notifications
[application registerForRemoteNotifications];
}
- (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"]){
}
}
#endif
以下のメソッドでデバイストークンを取得します。
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
詳細については、 詳細回答 を参照してください。
これが誰かの助けになることを願っています。