2016-03-30 109 views
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"]}"} 

請告訴我我在做什麼錯了代碼。

回答

2

爲了送你不得不充當用戶

要做到這一點,你必須與用戶創建一個會話推

使你的代碼應該是這樣的:

var params = {login: 'garry', password: 'garry5santos'}; 

QB.createSession(params, function(err, result) { 
    if(!err){ 
    // send a push code 
    } 
}); 
+0

感謝@lgor,它工作。 –

+0

現在網絡上沒有錯誤,通知也排隊等待quickblox push的列表,但沒有通知設備。當我從Web控制檯發送時,我能夠收到推送。請建議下一步做什麼。 –

+0

@RaviGupta請檢查您是否在iOS應用中以正確的方式設置了所有內容:http://quickblox.com/developers/SimpleSample-messages_users-ios –