2016-10-18 11 views
2

私は実際にはスウィフト2.3です。 着信コールはCallKitとうまく機能します。しかしOutGoing Call ....CallKitで電話をかけよう

私はSpeakerBoxプロジェクトを見ましたが、私は同じことをします。 しかし、それは動作しません。

私の通話を開始するには、私は後

let handle = CXHandle(type: .PhoneNumber, value: "TOTO") 
let startCallAction = CXStartCallAction(callUUID: uuid, handle: handle) 
startCallAction.video = video 
let transaction = CXTransaction() 
transaction.addAction(startCallAction) 
requestTransaction(transaction) 

を使用し、スピーカーボックスプロジェクトでは、この関数が呼び出されます:私のプロジェクトで

func provider(provider: CXProvider, perform action: CXStartCallAction) 

でもありません。それから、私が電話を切ったとき、私は "Call failed"を見る。

アイデアはありますか?

+0

「呼び出しに失敗しました」は、自分のアプリがクラッシュしたことを示すことがよくあります。アプリがクラッシュしているかどうかをデバッガで教えてください。 –

+0

あなたはシミュレータではなくデバイスでこれをやっていますか?あなたはvoipバックグラウンドモードを追加しましたか?プロバイダを正しく初期化しましたか? – user102008

答えて

0

CXProviderを設定し、その代理人を適切に設定していることを確認してください。 CXProviderのdelegateプロパティを設定しないと、代理人は実行するアクションを受け取りません。

また、「失敗した」UIが表示された場合は、アプリがクラッシュしている可能性があります。私はクラッシュログをチェックしたり、デバッガでアプリを実行したりします。

0

私の知る限り見ることができるように、スピーカーボックスのデモには、次のプロバイダメソッドは実行されません:

https://developer.apple.com/documentation/callkit/cxprovider/1930701-reportcall

func reportCall(with UUID: UUID, 
     endedAt dateEnded: Date?, 
     reason endedReason: CXCallEndedReason) 

- (void)reportCallWithUUID:(NSUUID *)UUID endedAtDate:(nullable NSDate 
*)dateEnded reason:(CXCallEndedReason)endedReason; 

UI画面であることを "コールに失敗しました" につながりますCallKitにはコールが終了した理由が示されておらず、デフォルトでは「 CXCallEndedReasonFailed」とみなされているようです。

CXEndCallActionトランザクションに「Call failed」画面を削除するよう要求する前に、「reportCall endedAt」を呼び出します。

+0

これを追加しても、 "Call Failed"と表示されます。これを追加すると、CXEndCallActionトランザクションエラーが表示されます。 Error Domain = com.apple.CallKit.error.requesttransaction Code = 4(これはunknownCallUUIDです)。 この呼び出しを非同期に行う必要があるか、プロバイダーの代理人の呼び出し終了処理を処理するための一環として、呼び出しを行う必要がありますか? – LowAmmo

+0

"Error Domain = com.apple.CallKit.error.requesttransaction Code = 4(unknownCallUUIDです)"というエラーが表示された場合、未知のUUIDを "reportCallWithUUID"メソッドに渡しています。実際の通話と同じ通話UUIDを使用していることを確認してください – Leetmorry