着信時に発信者番号(電話番号)を取得しようとしています。 TrueCallerはこれを実装しており、着信発信者の電話番号を取得します。
私はこの情報を見つけました:1。CoreTelephonyFramework(呼び出し状態のみを提供します)2。Appleの9.0アップデート:「たぶん」連絡先が同期します。メールアプリで、着信電話番号を検出します。
### EDIT ###
iOS 10以降:
Callkit を使用し、電話帳の拡張子を見てください
ドキュメントによると、
着信発信者の識別
電話が着信を受けると、システムは最初にユーザーの連絡先を調べて、一致する電話番号を見つけます。一致するものが見つからない場合、システムはアプリの電話帳拡張機能を調べて、一致するエントリを見つけて電話番号を特定します。これは、ソーシャルネットワークなど、システムの連絡先とは別のユーザーの連絡先リストを維持するアプリケーションや、カスタマーサービスサポートや配信通知など、アプリ内から開始される可能性のある着信を識別する場合に役立ちます。 。
たとえば、ソーシャルネットワーキングアプリでジェーンと友達であるが、連絡先に電話番号が含まれていないユーザーについて考えてみます。ソーシャルネットワーキングアプリには、ユーザーのすべての友達の電話番号をダウンロードして追加するCall DirectoryExtensionがあります。このため、ユーザーがジェーンから着信を受けると、システムは「不明な発信者」ではなく「(アプリ名)発信者ID:ジェーンアップルシード」のように表示します。
着信発信者に関する識別情報を提供するには、beginRequest(with :)の実装でaddIdentificationEntry(withNextSequentialPhoneNumber:label :)メソッドを使用します。
class CustomCallDirectoryProvider: CXCallDirectoryProvider {
override func beginRequest(with context: CXCallDirectoryExtensionContext) {
let labelsKeyedByPhoneNumber: [CXCallDirectoryPhoneNumber: String] = [ … ]
for (phoneNumber, label) in labelsKeyedByPhoneNumber.sorted(by: <) {
context.addIdentificationEntry(withNextSequentialPhoneNumber: phoneNumber, label: label)
}
context.completeRequest()
}
}
このメソッドは、システムがアプリ拡張機能を起動したときにのみ呼び出され、個々の呼び出しごとには呼び出されないため、呼び出し識別情報を一度に指定する必要があります。たとえば、着信コールに関する情報を見つけるためにWebサービスにリクエストを送信することはできません。
iOS 9以前:
Kakshilが述べたように、ジェイルブレイクされていないデバイスでは発信者IDは使用できません。
そして、私はあなたに本当の発信者がどのように機能するかについていくつかの発見をします、
通話履歴を読み取らず、実際に作成しました アクション拡張子 連絡先を共有しようとすると、サーバーから取得した連絡先の詳細を表示するようにコード化されたtruecallerアプリ拡張子が表示されます
また、「一部のXから電話があります」という、数回の通話で受信したプッシュ通知と混同される可能性があります。これはtruecallerがトリックを使用した場所です。はっきりと気づいたら、プッシュ通知は、truecallerがインストールされているAndroidユーザーから電話がかかってきたときにのみ受信されます。詳しく説明します。
X(truecallerがインストールされているAndroidユーザー)、Y(truecallerがインストールされているiosユーザー)を呼び出すと、AndroidバージョンはXがYを呼び出すことをサーバーに通知します。サーバーはYのiPhoneにプッシュ通知を送信します。
ジェイルブレイクされていないデバイスでは、発信者IDは使用できません。
ただし、どのユーザーが電話をかけているのかを知ることはできても、それが自分に役立つかどうかわからない方法が1つあります。
IPhoneに接続されたBluetoothデバイスを使用している場合は、着信を含むすべての通知が届き、発信者IDを取得できます。
これとは別に、現在、呼び出されたIDを知る方法はまったくありません。