1
我試圖使用QuickBlox推送通知API向iOS設備發送來自web後端(JavaScript)的推送通知。我在iOS應用上創建了訂閱,並嘗試從JavaScript向訂閱用戶發送推送通知。無法從Web發送推送通知(JavaScript)QuickBlox
的iOS應用代碼認購如下:
- (void)loginAndConnectToChatQBUserWithLoginName:(NSString *)loginName password:(NSString *)password{
isConnecting = YES;
QBUUser *user = [[QBUUser alloc] init];
user.login = loginName;
user.password = password;
__weak typeof(self) weakSelf = self;
//Authenticate user
[QBRequest logInWithUserLogin:user.login password:user.password successBlock:^(QBResponse * _Nonnull response, QBUUser * _Nullable user) {
NSLog(@"Logged in");
[weakSelf registerForRemoteNotifications];
[AppDelegate appDelegate].currentUser = user;
user.password = password;
[QBChat.instance connectWithUser:user completion:^(NSError * _Nullable error) {
if (QBChat.instance.isConnected) {
NSLog(@"chat is connected");
}
else{
NSLog(@"chat not connected");
}
isConnecting = NO;
}];
} errorBlock:^(QBResponse * _Nonnull response) {
// Handle error here
NSLog(@"Unable to connect");
isConnecting = NO;
}];
}
- (void)registerForRemoteNotifications{
#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:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
}
#else
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
#endif
}
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
NSString *deviceIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
QBMSubscription *subscription = [QBMSubscription subscription];
subscription.notificationChannel = QBMNotificationChannelAPNS;
subscription.deviceUDID = deviceIdentifier;
subscription.deviceToken = deviceToken;
[QBRequest createSubscription:subscription successBlock:^(QBResponse *response, NSArray *objects) {
//Subscription Successfull
NSLog(@"Subscription Successfull.");
} errorBlock:^(QBResponse *response) {
//Subscription Failure
}];
}
創建預訂成功響應是如下:
[QBResponse], status: 201
代碼從JavaScript發送推送通知如下:
var pushCustomParams = {
message: 'Message received from Bob',
ios_badge: 1,
ios_sound: 'mysound.wav', //Sound File name
user_id: '234', //Caller User ID
}
var params = {
notification_type: 'push',
user: {ids: [110678]}, // recipients.
environment: 'development', // environment, can be 'production' as well.
message: QB.pushnotifications.base64Encode(JSON.stringify(pushCustomParams))
};
QB.pushnotifications.events.create(params, function(err, response) {
if (err) {
console.log(err);
} else {
// success
}
});
關於事件創建我始終得到一個錯誤:
[EventsProxy] create Object { notification_type:"push", user:Object,environment:"development",message:"ey....."}
[ServiceProxy] Request: POST Object {data:"{"url":"https://api.quickblox.com/e.."}
[ServiceProxy] ajax error 401 Unauthorized {"errors" : ["Token is required"]}
Object {code:401, status:"error", message:"Unauthorized", detail:"{errors"["Token is required"]}"}
請告訴我我在做什麼錯了代碼。
感謝@lgor,它工作。 –
現在網絡上沒有錯誤,通知也排隊等待quickblox push的列表,但沒有通知設備。當我從Web控制檯發送時,我能夠收到推送。請建議下一步做什麼。 –
@RaviGupta請檢查您是否在iOS應用中以正確的方式設置了所有內容:http://quickblox.com/developers/SimpleSample-messages_users-ios –