Apple Push Notifications не входит в iPhone [дубликат]

Итак, я недавно возился с чем-то похожим на это, и я придумал следующее решение, которое использует способ ввода ввода, который отклоняет нежелательный файл, прежде чем он будет проверен любым логическим способом.

read_single_keypress() любезность https://stackoverflow.com/a/6599441/4532996

def read_single_keypress() -> str:
    """Waits for a single keypress on stdin.
    -- from :: https://stackoverflow.com/a/6599441/4532996
    """

    import termios, fcntl, sys, os
    fd = sys.stdin.fileno()
    # save old state
    flags_save = fcntl.fcntl(fd, fcntl.F_GETFL)
    attrs_save = termios.tcgetattr(fd)
    # make raw - the way to do this comes from the termios(3) man page.
    attrs = list(attrs_save) # copy the stored version to update
    # iflag
    attrs[0] &= ~(termios.IGNBRK | termios.BRKINT | termios.PARMRK
                  | termios.ISTRIP | termios.INLCR | termios. IGNCR
                  | termios.ICRNL | termios.IXON )
    # oflag
    attrs[1] &= ~termios.OPOST
    # cflag
    attrs[2] &= ~(termios.CSIZE | termios. PARENB)
    attrs[2] |= termios.CS8
    # lflag
    attrs[3] &= ~(termios.ECHONL | termios.ECHO | termios.ICANON
                  | termios.ISIG | termios.IEXTEN)
    termios.tcsetattr(fd, termios.TCSANOW, attrs)
    # turn off non-blocking
    fcntl.fcntl(fd, fcntl.F_SETFL, flags_save & ~os.O_NONBLOCK)
    # read a single keystroke
    try:
        ret = sys.stdin.read(1) # returns a single character
    except KeyboardInterrupt:
        ret = 0
    finally:
        # restore old state
        termios.tcsetattr(fd, termios.TCSAFLUSH, attrs_save)
        fcntl.fcntl(fd, fcntl.F_SETFL, flags_save)
    return ret

def until_not_multi(chars) -> str:
    """read stdin until !(chars)"""
    import sys
    chars = list(chars)
    y = ""
    sys.stdout.flush()
    while True:
        i = read_single_keypress()
        _ = sys.stdout.write(i)
        sys.stdout.flush()
        if i not in chars:
            break
        y += i
    return y

def _can_you_vote() -> str:
    """a practical example:
    test if a user can vote based purely on keypresses"""
    print("can you vote? age : ", end="")
    x = int("0" + until_not_multi("0123456789"))
    if not x:
        print("\nsorry, age can only consist of digits.")
        return
    print("your age is", x, "\nYou can vote!" if x >= 18 else "Sorry! you can't vote")

_can_you_vote()

Здесь вы можете найти полный модуль здесь .

Пример:

$ ./input_constrain.py
can you vote? age : a
sorry, age can only consist of digits.
$ ./input_constrain.py 
can you vote? age : 23
your age is 23
You can vote!
$ _

Обратите внимание, что природа этой реализации заключается в том, что она закрывает stdin, как только считывается что-то, что не является цифрой. Я не попал в enter после a, но мне нужно было после чисел.

Вы можете объединить это с функцией thismany() в том же модуле, чтобы разрешить, скажем, три цифры.

19
задан Migol 25 March 2014 в 11:26
поделиться

5 ответов

Я пошел по тому же учебнику.

Убедитесь, что ваше приложение указано в центре уведомлений, и это тип предупреждения - это что-то, но не равно.

Вам нужно проверить свое уведомление в 3-х условиях,

Когда ваше приложение открыто, в фоновом режиме и при закрытии.

Для этого вам нужно проверить эти методы

// To Register your device token
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken

//If your app is not able to register
- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{}

//Your app receives push notification.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{

    UIApplicationState state = [application applicationState];

    // If your app is running
    if (state == UIApplicationStateActive)
    {

        //You need to customize your alert by yourself for this situation. For ex,
        NSString *cancelTitle = @"Close";
        NSString *showTitle = @"Get Photos";
        NSString *message = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@""
                                                            message:message
                                                           delegate:self
                                                  cancelButtonTitle:cancelTitle
                                                  otherButtonTitles:showTitle, nil];
        [alertView show];
        [alertView release];

    }
    // If your app was in in active state
    else if (state == UIApplicationStateInactive)
    {
    }
}
2
ответ дан Baby Groot 20 August 2018 в 20:17
поделиться
  • 1
    Привет Hinta, метод - (void) приложение: (UIApplication *) приложение didReceiveRemoteNotification: (NSDictionary *) userInfo не вызывается в моем случае. и все остальные правильны. – Idiot 22 April 2013 в 07:32
  • 2
    Я думаю, вы должны жестко закодировать токен своего устройства в simplePush.php. Таким образом, нет проблемы с регистрацией вашего устройства. Теперь попробуйте выяснить, почему вы не получаете push-уведомление на конце устройства. – Baby Groot 22 April 2013 в 07:42
  • 3
    Тонны благодарности Хинта ... я понимаю, в токене устройства было место. – Idiot 22 April 2013 в 08:03
  • 4
    @Idiot Мое удовольствие :) – Baby Groot 22 April 2013 в 16:13
  • 5
    @Idiot, В идеале вы должны были принять этот ответ! – InfantPro'Aravind' 1 May 2013 в 09:32
  • 6
    просто потратил & gt; 1 час с моим приложением на переднем плане, пытаясь понять, почему я не получаю push-уведомления ... о, черт! :))) – oyatek 8 March 2014 в 14:32
  • 7
    @Nitin вы используете сертификат разработки и профиль подготовки и для создания ipa? – Divyam shukla 11 June 2015 в 02:47
  • 8
    Вы можете выбрать другой профиль сертификата и обеспечения для режима выпуска и разработки. – Divyam shukla 11 June 2015 в 02:57

Я ничего не получал:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any])

Но мой компилятор остановился на точке останова в

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
0
ответ дан Mantas Laurinavičius 20 August 2018 в 20:17
поделиться
  • 1
    ваша полезная нагрузка может быть пустым значением, которое вы можете получить из userInfo. – Divyam shukla 16 August 2017 в 06:29

Убедитесь, что вы выбрали правильный профиль состояния

и что ваше приложение сведено к минимуму. Если приложение не сведено к минимуму

 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    NSLog(@"info %@", userInfo);
}

Другая полезная информация о проблемах.

Для TESTING push вы можете использовать APN Tester Free ]. Внимание: вставить маркер с пробелами.

1
ответ дан Nik Kov 20 August 2018 в 20:17
поделиться

Убедитесь, что вы используете профиль подготовки, поддерживающий push-уведомление. а затем проверьте, отправляется ли маркер на сервер.

6
ответ дан Saqib Saud 20 August 2018 в 20:17
поделиться
  • 1
    да, оба выше работают нормально. – Idiot 22 April 2013 в 06:40
  • 2
    используете ли вы тот же сертификат для создания профиля SSL и профилей? это не то же самое, что и push-уведомление не работает. Также проверьте, успешно ли вы подключились к APNS developer.apple.com/library/ios/#DOCUMENTATION/… – Saqib Saud 22 April 2013 в 06:49
  • 3
    saqib: Я могу запустить приложение и его уверенность с использованием профиля APNS, а также получить токен устройства в методе didRegisterForRemoteNotificationsWithDeviceToken. я получил предупреждение «PushTest» хотел бы отправить вам PusNotification только один раз, поэтому он уверен, что я использую правильный профиль. – Idiot 22 April 2013 в 06:52
  • 4
    Убедитесь, что вы используете профиль с включенным уведомлением. Но вы не можете использовать один и тот же CSR на стороне клиента и на стороне сервера. что обычно является причиной того, что push-уведомление не работает. – Saqib Saud 22 April 2013 в 07:01
  • 5
    Спасибо saqib .... можете ли вы предложить мне, как я могу проверить то же самое (вы, возможно, не используете тот же CSR на стороне клиента и на стороне сервера) – Idiot 22 April 2013 в 07:08

Пожалуйста, проверьте настройки вашего устройства, если уведомления для приложения включены, и убедитесь, что тип уведомления не является «Нет» в Центре уведомлений.

1
ответ дан Yogi 20 August 2018 в 20:17
поделиться
  • 1
    Я уже пробовал это с помощью Banner & amp; Предупреждение. Приложение отображается в NotificationCeter. – Idiot 22 April 2013 в 07:31
Другие вопросы по тегам:

Похожие вопросы: