react-native-callkeep icon indicating copy to clipboard operation
react-native-callkeep copied to clipboard

Native callback for call rejects

Open remigijusbalc opened this issue 3 years ago • 23 comments

This callback helps in cases when JS context is not loaded and call rejection have to be instantly reported to backend

remigijusbalc avatar May 19 '21 12:05 remigijusbalc

@sboily hey, could you review once more

remigijusbalc avatar May 28 '21 13:05 remigijusbalc

@remigijusbalc could you help me create an event for cancel a call. My context is when a call is coming and then user press wake/sleep button in order to cancel a call. I really need that event please help me

khanhduy62 avatar May 31 '21 08:05 khanhduy62

@khanhduy62 till this PR gets a review, you could just fork my repo and use it like this:

[RNCallKeep setup:@{ @"appName": @"Name", @"maximumCallGroups": @1, @"maximumCallsPerCallGroup": @1, @"supportsVideo": @YES, @"includesCallsInRecents": @NO, } callRejectHandler: ^(NSString* uuid, void (^completion)(void)) {

NSString *cancelUrl = @""; // server url
NSString *paramValue = @"value";
NSDictionary *parameters = @{
  @"param": paramValue,
};
NSData *callEndData = [NSJSONSerialization dataWithJSONObject: parameters options: NSJSONWritingPrettyPrinted error: nil];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL: [NSURL URLWithString: cancelUrl]];
[request setHTTPMethod: @"POST"];
[request addValue: @"application/json" forHTTPHeaderField: @"Content-Type"];
[request setHTTPBody: callEndData];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
        if(httpResponse.statusCode == 200) {
          NSError *parseError = nil;
          NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];
          NSLog(@"The response is - %@",responseDictionary);
        } else {
          NSLog(@"Error");
        }
 completion();
}];
[dataTask resume];

}];

remigijusbalc avatar May 31 '21 08:05 remigijusbalc

@remigijusbalc thank you, let me check it :D

khanhduy62 avatar Jun 01 '21 02:06 khanhduy62

@manuquentin Hey, could you check this out?

remigijusbalc avatar Jun 10 '21 06:06 remigijusbalc

@manuquentin any feedback? Looks good to me.

sboily avatar Jun 21 '21 22:06 sboily

@sboily @manuquentin Any update on this. required feature, if possible please release a new version with this.

hussainsherwani avatar Jul 05 '21 04:07 hussainsherwani

Hello @hussainsherwani, sorry we are quite busy for the moment, but yeah we will review it as soon as possible.

sboily avatar Jul 05 '21 21:07 sboily

@remigijusbalc I tried with your fork , I am getting an error, could you please help me out No known class method for selector 'reportNewIncomingCall:handle:handleType:hasVideo:localizedCallerName:supportsHolding:supportsDTMF:supportsGrouping:supportsUngrouping:fromPushKit:payload:withCompletionHandler:'

hussainsherwani avatar Jul 07 '21 08:07 hussainsherwani

@hussainsherwani my fork has another feature - to cancel calls and it's not submitted as PR. You can ignore it by passing "isCancelEvent: NO" to reportNewIncomingCall method in your AppDelegate didReceiveIncomingPushWithPayload method.

remigijusbalc avatar Jul 07 '21 09:07 remigijusbalc

@remigijusbalc Thanks for the quick reply, I tried to add isCancelEvent: NO in reportNewIncomingCall but still error persist. unable to resolve this.

Screenshot 2021-07-07 at 3 05 02 pm

hussainsherwani avatar Jul 07 '21 10:07 hussainsherwani

Try reinstalling node_modules and pods, then checkouting to this PR commit

remigijusbalc avatar Jul 07 '21 10:07 remigijusbalc

@remigijusbalc Thanks, It was my mistake build successfully, isCancelEvent should be last parameter in reportNewIncomingCall , adding after withCompletionHandler build successfully. Will test it now. Anyway Thanks for the help and Great PR.

hussainsherwani avatar Jul 07 '21 11:07 hussainsherwani

@remigijusbalc could you please help me in one more thing how can I get my notification payload when a call decline as it only give a UUID and we need to send some other values too from notification payload to tell server user declined the call

hussainsherwani avatar Jul 09 '21 08:07 hussainsherwani

@hussainsherwani You could simply save payload in your AppDelegate defined dictionary based on uuid and on callReject callback use it

remigijusbalc avatar Jul 09 '21 09:07 remigijusbalc

hello @remigijusbalc with your forked repo android app not working, getting error error: incompatible types: int cannot be converted to String super.onReject(rejectReason); ^

hussainsherwani avatar Jul 26 '21 09:07 hussainsherwani

Hey @remigijusbalc & @hussainsherwani, Shouldn't the rejection event fire immediately when clicking the cancel button? @remigijusbalc I forked your repo but the rejection event only fires when I open the app after canceling the call. Do you know why this is? Is this the same for you or does it fire immediately?

linus-komnick avatar Aug 03 '21 07:08 linus-komnick

hey @linus-komnick for me rejection event fire immediately I am using this but in @remigijusbalc forked repo there is an issue for android so when I create android build I use library package for IOS I use forked repo

hussainsherwani avatar Aug 03 '21 08:08 hussainsherwani

@hussainsherwani thx, I will take note of that! It's weird though that the cancel event doesn't get triggered in my app. It must be something that I'm doing wrong. My NSLogs don't work either. I'm forced to use post request to log stuff, because NSLog stopped working. So maybe there is a correlation between those two issues...

linus-komnick avatar Aug 03 '21 08:08 linus-komnick

@hussainsherwani In my app the rejection event fires immediately when receiving a voip/pushkit notification. But not when canceling the call. For you it's the other way around, right?

linus-komnick avatar Aug 03 '21 08:08 linus-komnick

@remigijusbalc can you please update the PR as there is now a conflict RNCallKeep.m file. @sboily @manuquentin could you please look into this if now you have time

hussainsherwani avatar Aug 24 '21 07:08 hussainsherwani

Hey, @remigijusbalc just to confirm, does this PR solves the issue of not triggering the endCall when the call is rejected when a user presses the reject button in the incoming call? Basically what happens currently is that when a call is rejected through the incoming call the endCall event is triggered which seems weird. So, there's no way of handling the reject call. I have a usecase where the reject call and hangup button should trigger different WS events. But here in both the scenarios, the endCall event is triggered.

khushal87 avatar Nov 10 '22 16:11 khushal87

any update on this?

wilmxre avatar Sep 28 '23 09:09 wilmxre