我正在尝试使用 QuickBlox 推送通知 API 从 Web 后端 (JavaScript) 向 iOS 设备发送推送通知。我在 iOS 应用上创建了订阅,并尝试从 JavaScript 向订阅用户发送推送通知。
要订阅的iOS App代码如下:
- (void)loginAndConnectToChatQBUserWithLoginNameNSString *)loginName passwordNSString *)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] respondsToSelectorselector(registerUserNotificationSettings]) {
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypesUIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
else{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
}
#else
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
#endif
}
-(void)applicationUIApplication *)application didRegisterForRemoteNotificationsWithDeviceTokenNSData *)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"]}"}
请建议我在代码中做错了什么。
Best Answer-推荐答案 strong>
为了发送推送,您必须充当用户
为此,您必须与用户创建 session
所以你的代码应该是这样的:
var params = {login: 'garry', password: 'garry5santos'};
QB.createSession(params, function(err, result) {
if(!err){
// send a push code
}
});
关于javascript - 无法从 Web(JavaScript) QuickBlox 发送推送通知,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/36308353/
|