6

iOS 8 のプッシュ通知が機能しません。

エラー表示:

implicit conversion of 'unsigned long 'UIUserNotificationSettings *' is disallowed with arc

コード:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [application registerUserNotificationSettings:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge)];
    return YES;
}

ここに画像の説明を入力 私はios 8.0とxcode 6 betaを使用しています。

4

5 に答える 5

7

iOS 8の公式ドキュメントから以下から取得しています。

  • ローカル通知またはプッシュ通知を使用するアプリは、UIUserNotificationSettings オブジェクトを使用して、ユーザーに表示するアラートの種類を明示的に登録する必要があります。この登録プロセスは、リモート通知を登録するプロセスとは別のものであり、ユーザーは、要求されたオプションを使用して通知を配信する許可を与える必要があります。
  • ローカル通知とプッシュ通知には、アラートの一部としてカスタム アクションを含めることができます。カスタム アクションは、アラートにボタンとして表示されます。タップすると、アプリに通知され、対応するアクションを実行するよう求められます。ローカル通知は、コア ロケーション リージョンとのやり取りによってもトリガーできます。

そしてまた読む

https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIUserNotificationSettings_class/index.html#//apple_ref/occ/cl/UIUserNotificationSettings

https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIApplication_Class/index.html#//apple_ref/occ/instm/UIApplication/registerUserNotificationSettings :

だから答えは..

/// First register notification setting with settings type like 
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
[[UIApplication sharedApplication] registerForRemoteNotifications]; // you can also set here for local notification.
于 2014-06-03T04:53:22.300 に答える
5
- (void)registerForRemoteNotificationTypes:(NSUInteger)notificationTypes categories:(NSSet *)categories
{
    if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)])
    {
        [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:notificationTypes categories:categories]];
    }
    else if ([UIApplication instancesRespondToSelector:@selector(registerForRemoteNotificationTypes:)])
    {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:notificationTypes];
    }
}

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
    if ([UIApplication instancesRespondToSelector:@selector(registerForRemoteNotifications)])
    {
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    }
}

UIUserNotificationSettings-Extensionを試すと、新しい #iOS8 #Interactive #Notifications の処理がはるかに簡単になるヘルパー メソッドが提供されます。

于 2014-06-04T21:05:03.310 に答える
1

実行時に提供されるログを参照してください。最初は、ローカルイベントのユーザー登録なしで、ログは示唆しています

UILocalNotificationInfiniteRepeatCount, next fire date = Wednesday, 4 June 2014 9:27:24 pm India Standard Time, user info = (null)} with an alert but haven't received permission from the user to display alerts.

これはiOS8です。

したがって、この場合、使用する必要もあります

[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert) categories:nil]];

didFinishLaunchingWithOptions

于 2014-06-04T16:08:09.260 に答える
0

これは、iOS 8 と iOS 8 未満の両方を処理するために必要なものです。

if (SYSTEM_VERSION_LESS_THAN(@"8.0")) {
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert];
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeNone];
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge];
} else {
    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
    [[UIApplication sharedApplication] registerForRemoteNotifications];
}
于 2014-10-02T00:55:39.210 に答える