Urban Airship:在 iOS 应用程序的第一个 运行 期间生成频道 ID
Urban Airship: Generate channel ID during the first run of the iOS app
我已经注册了Urban Airship,获得了app key、secret和master secret。我也整合了他们的图书馆。
-(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 始终为 null。
我能够在第二个 运行 期间接收到 channelID,但在第一个 运行 期间无法接收。无论如何可以建议应用程序在第一个 运行 期间获取 channelID 的方法。提前致谢。
已编辑:
根据 ralepinski 的建议,我添加了“[UAirship push].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。让我知道。谢谢。
频道创建依赖于网络请求。它不会立即可用,但您可以使用 UARegistrationDelegate. You can assign the delegate on the UAPush instance here:
监听它何时可用
[UAirship push].registrationDelegate = self.registrationDelegate;
有时,如果SDK无法生成deviceToken,频道注册会延迟到下一个应用前台。如果您在应用程序的功能部分启用远程通知,将立即生成设备令牌,并在第一个 运行.
期间创建通道
我已经注册了Urban Airship,获得了app key、secret和master secret。我也整合了他们的图书馆。
-(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 始终为 null。
我能够在第二个 运行 期间接收到 channelID,但在第一个 运行 期间无法接收。无论如何可以建议应用程序在第一个 运行 期间获取 channelID 的方法。提前致谢。
已编辑:
根据 ralepinski 的建议,我添加了“[UAirship push].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。让我知道。谢谢。
频道创建依赖于网络请求。它不会立即可用,但您可以使用 UARegistrationDelegate. You can assign the delegate on the UAPush instance here:
监听它何时可用[UAirship push].registrationDelegate = self.registrationDelegate;
有时,如果SDK无法生成deviceToken,频道注册会延迟到下一个应用前台。如果您在应用程序的功能部分启用远程通知,将立即生成设备令牌,并在第一个 运行.
期间创建通道