Получить параметры запуска без переопределения didFinishLaunchingWithOptions: - PullRequest
9 голосов
/ 15 декабря 2011

Я встроен в среду (Adobe AIR), где я не могу переопределить didFinishLaunchingWithOptions.Есть ли другой способ получить эти варианты?Они где-то хранятся в какой-то глобальной переменной?Или кто-нибудь знает, как получить эти параметры в AIR?

Мне это нужно для службы push-уведомлений Apple (APNS).

1 Ответ

11 голосов
/ 29 февраля 2012

Следуя пути по ссылке слева от Михеля (http://www.tinytimgames.com/2011/09/01/unity-plugins-and-uiapplicationdidfinishlaunchingnotifcation/), можно создать класс, метод init которого добавляет наблюдателя в ключ UIApplicationDidFinishLaunchingNotification. Когда выполняется метод наблюдателя, launchOptions будет содержаться в пользовательской информации уведомления. Я делал это с локальными уведомлениями, так что это была реализация моего класса:

static BOOL _launchedWithNotification = NO;
static UILocalNotification *_localNotification = nil;

@implementation NotificationChecker

+ (void)load
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(createNotificationChecker:)
               name:@"UIApplicationDidFinishLaunchingNotification" object:nil];

}

+ (void)createNotificationChecker:(NSNotification *)notification
{
    NSDictionary *launchOptions = [notification userInfo] ;

    // This code will be called immediately after application:didFinishLaunchingWithOptions:.    
    UILocalNotification *localNotification = [launchOptions objectForKey: @"UIApplicationLaunchOptionsLocalNotificationKey"];
    if (localNotification) 
    {
        _launchedWithNotification = YES;
        _localNotification = localNotification;
    }
    else 
    {
        _launchedWithNotification = NO;
    }
}

+(BOOL) applicationWasLaunchedWithNotification
{
    return _launchedWithNotification;
}

+(UILocalNotification*) getLocalNotification
{
    return _localNotification;
}

@end

Затем, когда мой контекст расширения инициализирован, я проверяю класс NotificationChecker, чтобы увидеть, было ли приложение запущено с уведомлением.

BOOL appLaunchedWithNotification = [NotificationChecker applicationWasLaunchedWithNotification];
if(appLaunchedWithNotification)
{
    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;

    UILocalNotification *notification = [NotificationChecker getLocalNotification];
    NSString *type = [notification.userInfo objectForKey:@"type"];

    FREDispatchStatusEventAsync(context, (uint8_t*)[@"notificationSelected" UTF8String], (uint8_t*)[type UTF8String]);
}

Надеюсь, это кому-нибудь поможет!

...