CoreTelephony 实现呼叫中心状态实时订阅 - iOS

今天接到一个实时订阅来电状态的需求,当使用 App 时若电话介入需要对当前状态进行状态实时订阅的操作(注:并非通话内容),根据不同的状态实行相关的需求操作,废话不多说步骤如下.

首先,常规操作先引用对应的头文件,来为后续功能铺路.

#import <CoreTelephony/CTCallCenter.h>
#import <CoreTelephony/CTCall.h>

其次,需要设置一个全局的属性,若在 viewDidLoad 方法中创建该属性的话, viewDidLoad 调用结束该创建的属性就会被销毁掉,则后续方法步骤都将失效,从而无法检测到来点状态.

/** 呼叫中心*/
@property (nonatomic, strong) CTCallCenter *callCenter;

再其次,便是具体状态订阅逻辑,code 如下.

#pragma mark - ************************************************ (订阅来电状态相关)
/**
 订阅来电状态 - 介入
 */
- (void)monitorTelephoneCall {
    kWeakSelf(self);
    
    // MsgAppStarting
    // MsgAppReactivate
    _callCenter = [[CTCallCenter alloc] init];
    _callCenter.callEventHandler = ^(CTCall * call) {
        if ([call.callState isEqualToString:CTCallStateDisconnected]) {// Call has been disconnected
            NSLog(@"电话 --- 断开连接");
        }
        else if ([call.callState isEqualToString:CTCallStateConnected]) {// Call has just been connected
            NSLog(@"电话 --- 接通");
            // 通知 H5 当前截屏操作
            dispatch_async(dispatch_get_main_queue(), ^{
                // do somethings
            });
            
        }
        else if ([call.callState isEqualToString:CTCallStateIncoming]) {// Call is incoming
            NSLog(@"电话 --- 待接通");
        }
        else if ([call.callState isEqualToString:CTCallStateDialing]) {// Call is Dialing
            NSLog(@"电话 --- 拨号中");
            // 通知 H5 当前截屏操作
            dispatch_async(dispatch_get_main_queue(), ^{
                // do somethings
            });
            
        }
        else {// Nothing is done"
            NSLog(@"电话 --- 无操作");
        }
    };
}

注:若需要对 UI 方面进行调试,需要提前进行主线程的调度,不然会造成 crash.


此次分享到此结束,希望内容能对大家实际有所帮助,有什么不足之处欢迎指点共同进步!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Unity游戏中集成广点通iOS SDK,可以按照以下步骤进行操作: 1. 下载广点通iOS SDK,并解压缩文件。 2. 在Unity中创建一个新的iOS项目,并将解压缩后的广点通iOS SDK文件夹拖入到Unity项目的Assets文件夹中。 3. 在Unity中选择File > Build Settings,然后在Platforms下选择iOS。 4. 在Player Settings中,选择iOS选项卡并设置Bundle Identifier、版本号等基本信息,同时在Other Settings中设置Scripting Backend为IL2CPP。 5. 在Xcode中打开Unity生成的iOS项目,然后添加广点通iOS SDK。 6. 在Xcode中选择Build Phases选项卡,然后展开Link Binary With Libraries,添加以下依赖项: - AdSupport.framework - CoreTelephony.framework - libz.tbd - libsqlite3.tbd - libc++.tbd - StoreKit.framework 7. 在Xcode中选择Build Settings选项卡,然后设置Other Linker Flags为“-ObjC”。 8. 在Xcode中选择Build Settings选项卡,然后设置Enable Bitcode为NO。 9. 在Xcode中选择Build Settings选项卡,然后设置Other C++ Flags为“-fno-rtti”。 10. 在Unity中编写代码来调用广点通iOS SDK,例如: ``` using UnityEngine; using System.Collections; using System.Runtime.InteropServices; public class GDTiOSDemo : MonoBehaviour { #if UNITY_IOS [DllImport("__Internal")] private static extern void _showBannerAd(string posId, int width, int height); #endif public string bannerPosId = "YOUR_BANNER_POS_ID"; void Start () { #if UNITY_IOS _showBannerAd(bannerPosId, 320, 50); #endif } } ``` 以上是大致的步骤,具体细节可能会根据不同版本的Unity和广点通iOS SDK而有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值