2015-10-15 2 views
1

Я зарегистрировался на Urban Airship, получил ключ приложения, секрет и секрет мастера. Я также интегрировал их библиотеку.Городской дирижабль: генерировать идентификатор канала во время первого запуска приложения iOS

-(void)setupUrbanAirship 
{ 
    UAConfig *config = [UAConfig defaultConfig]; 
    config.detectProvisioningMode = YES; 
    config.productionLogLevel=NO; 
    config.inProduction = NO; 
    config.developmentAppKey = @"XXXXXXXXXXXXXXXXXXX"; 
    config.developmentAppSecret = @"XXXXXXXXXXXXXXXXX"; 

    [UAirship takeOff:config]; 

    [UAirship push].userPushNotificationsEnabled = YES; 

    [UAirship push].userNotificationTypes = (UIUserNotificationTypeAlert | 
              UIUserNotificationTypeBadge | 
              UIUserNotificationTypeSound); 
} 

Я называю это в моем коде:

NSString *channelID = [UAirship push].channelID; 
NSLog(@"channelID %@",channelID); 

Во время первого запуска приложения channelID всегда нуль.

Я могу получить идентификатор канала во время второго запуска, но не во время первого запуска. В любом случае, можно предложить способ для получения идентификатора channelID во время первого запуска. Заранее спасибо.

Отредактировано:

Согласно предложению ralepinski, я имею в добавляющий '[UAirship толчок] .registrationDelegate = self.registrationDelegate' строки кода.

В ViewController.h:

@interface ViewController : UIViewController 
{ 
    IBOutlet UIButton *selectButton; 
    NSTimer *channelIDDetectionTimer; 
} 
@property (nonatomic, weak, nullable) id<UARegistrationDelegate> registrationDelegate; 

В ViewController.m Я также использую следующие строки коды:

-(void)initRegistration 
{ 
    AppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 

    NSString *channelID = [UAirship push].channelID; 
    NSLog(@"channelID %@",channelID); 
    if (channelID!=nil) 
    { 
     [delegate saveChannelID]; 
     if (channelIDDetectionTimer!=nil) 
     { 
      [channelIDDetectionTimer invalidate]; 
      channelIDDetectionTimer = nil; 
     } 
    } 
    else 
    { 
     [UAirship push].registrationDelegate = self.registrationDelegate; 
     //[[UAPush alloc]updateRegistration]; 
      // Registering for only UIRemoteNotificationTypeNone will not result in a 
      // device token registration call. Instead update chanel registration directly. 
    } 
} 

-(void)viewWillAppear:(BOOL)animated 
{ 
    channelIDDetectionTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(initRegistration) userInfo:nil repeats:YES]; 
} 

Я позволившая удаленные уведомления, в разделе возможностей целевого приложения , Тем не менее, я получаю ChannelID как null во время первого запуска приложения. Дай мне знать. Благодарю.

+0

Thanks ralepinski! – Nitin

ответ

2

Создание канала зависит от сетевого запроса. Он не будет сразу доступен, но вы можете слушать, когда он доступен, используя UARegistrationDelegate. Вы можете назначить делегата на экземпляре UAPush here:

[UAirship push].registrationDelegate = self.registrationDelegate; 

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

+1

Привет ralepinski, я включил удаленные уведомления в разделе возможностей целевого приложения. Однако идентификатор канала не создается во время первого запуска. В чем может быть проблема ? – Nitin

+1

Теперь он работает. Метод 'setupUrbanAirship' был вызван намного позже, чем ошибка. Поместив его в метод делегирования приложения-до-завершения-запуска и добавив код, идентификатор канала был назначен почти сразу. – Nitin

+0

Рад, что вы это поняли! – ralepinski

Смежные вопросы