如何将PushKit的完成处理程序用于reportNewIncomingCallWithUUID

问题描述 投票:0回答:1

我正在为我的应用程序使用CallKit。

- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(NSString *)type withCompletionHandler:(nonnull void (^)(void))completion
{
    NSDictionary *payloadDict = payload.dictionaryPayload[@"aps"];           

    [self reportIncomingCallFrom:callerName withUUID:self.uuidCallkit completion:^(NSError * _Nullable error) {

    }];
    if (completion) {
        completion();
    }
}

我的问题是:我应该写完成,然后调用完成,还是直接调用completion();?那么哪个是正确的?

- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(NSString *)type withCompletionHandler:(nonnull void (^)(void))completion
{
    NSDictionary *payloadDict = payload.dictionaryPayload[@"aps"];           

    [self reportIncomingCallFrom:callerName withUUID:self.uuidCallkit completion:^(NSError * _Nullable error) {

    }];

    completion();
}

这是报告来电的方法。

- (void)reportIncomingCallFrom:(NSString *) from withUUID:(NSUUID *)uuid completion:(nullable void (^)(NSError *_Nullable error))completion
{
    CXHandle *callHandle = [[CXHandle alloc] initWithType:CXHandleTypeGeneric value:from];
    CXCallUpdate *callUpdate = [[CXCallUpdate alloc] init];

    callUpdate.remoteHandle = callHandle;
    callUpdate.supportsDTMF = YES;
    callUpdate.supportsHolding = NO;
    callUpdate.supportsGrouping = NO;
    callUpdate.supportsUngrouping = NO;
    callUpdate.hasVideo = NO;

    NSLog(@"income uuid here for income call %@",uuid);

    [self.callKitProvider reportNewIncomingCallWithUUID: uuid update:callUpdate completion:^(NSError *error) {
        if (!error) {
            NSLog(@"Incoming call successfully reported.");
        } else {
            NSLog(@"Failed to report incoming call successfully: %@.", [error localizedDescription]);
        }

        completion(error);
    }];
}

有时我没有收到后台推送。

我想知道我上面的方法是否正确。

ios callkit pushkit
1个回答
1
投票

在这种情况下,直接调用completion()或检查以前是否不是nil,这是等效的,因为已将completion声明为nonnull

因此,您可以直接拨打completion(),如果有问题,不是因为这个。

© www.soinside.com 2019 - 2024. All rights reserved.