webentwicklung-frage-antwort-db.com.de

Es wurde versucht, das Anwendungssymbol zu kennzeichnen, es wurde jedoch keine Berechtigung vom Benutzer zum Kennzeichnen der Anwendung erhalten: iOS 8 Xcode 6

Ich überprüfe meine App-Kompatibilität mit iOS 8 und erhalte folgende Aktion: Anmelden Konsole "Versuch, das Anwendungssymbol zu kennzeichnen, aber keine Erlaubnis vom Benutzer erhalten, die Anwendung zu kennzeichnen". Kann mir jemand bitte helfen, diese Warnung loszuwerden. Und ja, meine App zeigt Badges auf App Icon und TabBar Icon.

46
Hemant Chittora

Hier ist was ich in meiner AppDelegate gemacht habe 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // registering for remote notifications
    [self registerForRemoteNotification];
    return YES;
}


- (void)registerForRemoteNotification {
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
        UIUserNotificationType types = UIUserNotificationTypeSound | UIUserNotificationTypeBadge | UIUserNotificationTypeAlert;
        UIUserNotificationSettings *notificationSettings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];
    } else {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
    }
}

#ifdef __IPHONE_8_0
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
    [application registerForRemoteNotifications];
}
#endif
43
Hemant Chittora

Apple erstellt eine neue API zum Registrieren von Benachrichtigungen und zum Arbeiten mit Ausweisen.

Siehe Video zur WWDC 2014-Sitzung: https://developer.Apple.com/videos/wwdc/2014/?id=713 , http://asciiwwdc.com/2014/sessions/713 (Textversion) Und https://developer.Apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/index.html#//Apple_ref/occ/instm/UIApplication/registerUserNotificationSettings :

Der Benutzer kann die Berechtigungen für jede UIUserNotificationType (UIUserNotificationTypeBadge, UIUserNotificationTypeSound, UIUserNotificationTypeAlert) in den Einstellungen ändern.

Vor dem Ändern des Ausweises müssen Sie die Berechtigungen überprüfen.

Codebeispiel aus meiner AppDelegate:

- (BOOL)checkNotificationType:(UIUserNotificationType)type
{
  UIUserNotificationSettings *currentSettings = [[UIApplication sharedApplication] currentUserNotificationSettings];
  return (currentSettings.types & type);
}

- (void)setApplicationBadgeNumber:(NSInteger)badgeNumber
{
  UIApplication *application = [UIApplication sharedApplication];

  if(SYSTEM_VERSION_LESS_THAN(@"8.0")) {
    application.applicationIconBadgeNumber = badgeNumber;
  }
  else {
    if ([self checkNotificationType:UIUserNotificationTypeBadge]) {
      NSLog(@"badge number changed to %d", badgeNumber);
      application.applicationIconBadgeNumber = badgeNumber;
    }
    else {
      NSLog(@"access denied for UIUserNotificationTypeBadge");
    }
  }
}

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

Die currentUserNotificationSettings-Methode ist in der UI-Anwendungsinstanz verfügbar und bietet Ihnen die aktuellsten Benutzerbenachrichtigungseinstellungen.

Arbeiten mit der Ausweisnummer:

[self setApplicationBadgeNumber:0];

anstatt

application.applicationIconBadgeNumber = 0;
16
KepPM

Sie können verwenden

    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
        if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)])
        {
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
            [[UIApplication sharedApplication] registerForRemoteNotifications];
        } else
        {
            [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
             (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
        }
    #else
       [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
         (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
    #endif
9
user2885077

Ich habe diese Antwort gefunden, als ich in Swift nach einer Lösung gesucht habe. Ich habe Folgendes getan (unter der Annahme von iOS 8):

UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound | UIUserNotificationType.Alert | UIUserNotificationType.Badge, categories: nil))
UIApplication.sharedApplication().registerForRemoteNotifications()
7
djbp

Anstatt die IOS -Version zu überprüfen, würde ich prüfen, ob die UIUserNotificationSettings vorhanden sind, und mich für BadgeType registrieren, wie wir es bisher mit Fernbenachrichtigungen gemacht haben.

Class userNotification = NSClassFromString(@"UIUserNotificationSettings");

if (userNotification)
{
    UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];
}
5
Ilker Baltaci

Wenn Sie die lokale Benachrichtigung verwenden möchten, verwenden Sie den folgenden Code: 

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 


    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
    [[UIApplication sharedApplication] registerForRemoteNotifications];

#else

    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
 (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

#endif
5
appsign

iOS 8 hat eine Anwendungsmethode namens registerUserNotificationSettings:. Ein Teil der Dokumente sagt: "Wenn Ihre App im Hintergrund Warnungen anzeigt, Sounds wiedergibt oder das Symbol anzeigt, müssen Sie diese Methode während des Startzyklus aufrufen, um die Berechtigung zur Benachrichtigung des Benutzers auf diese Weise anzufordern."

3
Phillip Mills

Sie können verwenden 

if(SYSTEM_VERSION_LESS_THAN(@"8.0"))
{
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
     (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
}
else
{
    [[UIApplication sharedApplication] registerForRemoteNotifications];
}

....

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

Für die Push-Benachrichtigung glaube ich, dass es gelöst wird. In meinem Fall in Simulator bekomme ich diese Warnung, da Push nicht unterstützt wird und der Benutzer die Erlaubnis ablehnt, als Sie wieder diese Warnung erhalten.

1
souvickcse
+ (BOOL)canBadgeTheApp {
    BOOL canBadgeTheApp;
    if ([UIDevice currentDevice].systemVersion.doubleValue >= 8) {
        UIUserNotificationType types = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];
        canBadgeTheApp = ((types & UIRemoteNotificationTypeBadge) != 0);
    } else {
        canBadgeTheApp = YES;
    }
    return canBadgeTheApp;
}
0
Lucien

für "Swifters" den obigen Code:

final func checkNotificationType(type : UIUserNotificationType) -> Bool {

    let application = UIApplication.sharedApplication()
    if application.respondsToSelector(Selector("registerUserNotificationSettings:")) {
        // iOS8 and above
        let currentSettings : UIUserNotificationSettings = application.currentUserNotificationSettings()
        let types = currentSettings.types
        return types.rawValue & type.rawValue > 0
    }else{
        return true
    }
}
0
ingconti

das einzige, was Sie brauchen, ist

if (floor(NSFoundationVersionNumber) >= NSFoundationVersionNumber_iOS_8_0)       {
// here you go with iOS 8
} else {

}
0
Chuck Shen