当应用程序从后台返回到前台时,MCSession 无法重新连接

Posted

技术标签:

【中文标题】当应用程序从后台返回到前台时,MCSession 无法重新连接【英文标题】:MCSession ofen can't reconnect when app return to foreground from background 【发布时间】:2014-04-06 07:50:52 【问题描述】:

我正在使用 Mutipeer Connectivity 制作聊天应用程序。起初,一切运行良好,MCSession 可以相互连接。但是当用户点击主页按钮然后点击应用程序图标时,应用程序会相互断开连接并且通常无法重新连接。但有时它可以重新连接。成功是随机的。

    - (void)viewDidLoad

    [super viewDidLoad];
    ...

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(DidBecomeActive:)
                                                 name: UIApplicationDidBecomeActiveNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didEnterBackground:)
                                                 name: UIApplicationDidEnterBackgroundNotification object:nil];

    NSString *displayname=[[NSUUID UUID] UUIDString];
    _MyPeerID=[[MCPeerID alloc] initWithDisplayName:displayname];



- (void)DidBecomeActive:(NSNotification *)notification


    if (notFirstLaunch==YES) 
        NSLog(@"DidBecomeActive");
        NSString *displayname=[[NSUUID UUID] UUIDString];
        _MyPeerID=[[MCPeerID alloc] initWithDisplayName:displayname];
        [self createSession];
        [self createAdvertiser];
        [self beginBrowsing];


    
    notFirstLaunch=YES;



- (void)didEnterBackground:(NSNotification *)notification

    NSLog(@"didEnterBackground");
    [_MySession disconnect];
    _MySession=nil;
    _MyBrowser=nil;
    _MyAdver=nil;






- (void)createSession

    _MySession=[[MCSession alloc] initWithPeer:_MyPeerID];
    _MySession.delegate=self;



- (void)createAdvertiser

    _MyAdver=[[MCNearbyServiceAdvertiser alloc] initWithPeer:_MyPeerID discoveryInfo:nil serviceType:MyServiceType];
    _MyAdver.delegate=self;
    [_MyAdver startAdvertisingPeer];


- (void)beginBrowsing 
    _MyBrowser=[[MCNearbyServiceBrowser alloc] initWithPeer:_MyPeerID serviceType:MyServiceType];
    _MyBrowser.delegate=self;
    [_MyBrowser startBrowsingForPeers];

【问题讨论】:

你找到解决办法了吗? 【参考方案1】:

从您发布的代码来看,没有任何东西重新连接,因为在 didEnterBackground 中您断开了会话并破坏了会话、浏览器和广告商。在 DidBecomeActive 中,您有一个守卫 (notFirstLaunch),这意味着会话和广告商仅在您第一次激活时创建,而不是在您从后台返回时创建。

【讨论】:

以上是关于当应用程序从后台返回到前台时,MCSession 无法重新连接的主要内容,如果未能解决你的问题,请参考以下文章

当app从后台移动到前台时会触发哪个JS事件

当活动从后台(暂停)到前台时重新创建 Android 活动

应用程序从后台转移到前台时忽略推送通知

如何确定从iOS后台返回前台时加载哪个视图?

当应用程序从后台进入前台时,MPMoviePlayerController 黑屏

当应用程序进入后台和前台时,带有通知中心的登录屏幕,Swift