苹果手机iMessage无法连接服务器的原因如下:
1、 由于iphone6s是通过与移动运营商提供的无线基站连接的,所以如果当前在一些信号盲区的话,出现无服务是属于正常的情况,无须担心。比如在电梯里、也或是在一些非常偏僻的角落里,都会出现无服务的时候。
2、 由于信号差导致的iphone6s出现无服务的问题,当离开信号盲区以后,一般情况下会自动检测到手机信号的。当然如果依然没有出现手机信号的话,此时可以通先启用飞机模式,然后再打开,让iphone6s立即搜索当前周围的移动信号。
3、 iPhone软件系统导致的无服务
另外有时候有可能是系统临时性故障导致出现无服务问题,此时可以尝试重新启动iphone6s来解决。首先请长按iphone6s电源键,打开关机选项。
随后出现关机选项以后,再滑动关机。当关机黑屏以后,再按下电源键开机,就可以了。
4、 另外,如果重新启动以后,仍然不能解决的话,此时可以尝试还原iPhone6s的网络设置。在【设置-通用-还原】列表中,通过【还原网络设置】来解决问题。
5、 电话卡接触不良导致的无服务
有时候在使用iPhone6s的过程中,可能会由于磕碰的情况,导致iPhone6s与电话卡接触不良,导致出现无服务的情况。此时可以使用iPhone6s包装盒中自带的取卡针,也或是类似的物件,比如回形针。
接下来请从iPhone6s正面右侧边的小孔插入,稍微力用一按便可以把卡取出来。
取出卡拖中的电话卡,适当清洁一下,再重新装入iPhone6s里。接下来再看是否可以解决问题,如果还是不行的话,还可以尝试更换一张电话卡。如果更换电话卡以后,可以的话,说明是原来的电话卡问题,去运营商处补一张卡就好了。
如果更换电话卡,仍然出现无服务的话,此时就应该是iPhone6s手机硬件故障了。此时请携带iPhone6s手机,前往苹果售后作进一步检测处理。
当你的iPhone收到推送信息后到底会发生什么呢?总共有三种可能性:app在前台运行. 接收到推送信息时屏幕上不会有任何显示,也不会有提示音,但你的app delegate会收到这个推送信息。你可以在这里加入代码来处理接收到的信息。
app不在前台运行。iPhone可能停留在主界面或者另一个app正在运行.一个提示窗口会弹出,可能伴随着提示音。用户可以点击Close按钮来关闭这个窗口或者点击View按钮来打开你的app。如果用户点击的时Close按钮,那你的app不会处理这个推送的信息。
iPhone在锁屏状态下. 同样一个提示窗口弹出,并伴随着提示音,但是这个窗口不会有Close和View按钮。屏幕解锁后会自动进入你的app。
因为app delegate是接收推送信息的地方,我们对app的最后改动都是在AppDelegate.m文件中。我们需要修改两处:
application:didFinishLaunchingWithOptions:函数. 如果推送信息到达时你的app不在前台运行,而用户在弹出窗口点击了“View”按钮,你的app会重新运行然后这个信息会作为参数注入到application:didFinishLaunchingWithOptions:函数中。
application:didReceiveRemoteNotification:函数. 如果信息到达时你的app正在前台运行,那这个函数就会被调用。在iOS4.0或更新的版本,如果你的app从暂停状态进入前台,这个函数也会被调用。你可以用UIApplication的applicationState属性来检查你的app是否是从暂停状态苏醒。
上述的两个函数都会有一个字典参数其中包含了JSON格式的推送信息内容。OS已经帮我们把JSON格式的信息转换成Objective-C字典了。将下面的代码加到didFinishLaunchingWithOptions:函数的return语句前: if (launchOptions != nil)
{
NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]
if (dictionary != nil)
{
NSLog(@"Launched from push notification: %@", dictionary)
[self addMessageFromRemoteNotification:dictionary updateUI:NO]
}
}
我们先确保launchOptions参数不是nil以及launchOptions中包含了推送信息。然后调用addMessageFromRemoteNotification函数来处理这个信息。
把下面的函数加到AppDelegate.m文件中:- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{
NSLog(@"Received notification: %@", userInfo)
[self addMessageFromRemoteNotification:userInfo updateUI:YES]
}
这个函数同样依靠addMessageFromRemoteNotification来完成处理信息的工作。
将下面这个函数复制粘贴到didFinishLaunchingWithOptions:函数上面:- (void)addMessageFromRemoteNotification:(NSDictionary*)userInfo updateUI:(BOOL)updateUI
{
Message* message = [[Message alloc] init]
message.date = [NSDate date]
NSString* alertValue = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"]
NSMutableArray* parts = [NSMutableArray arrayWithArray:[alertValue componentsSeparatedByString:@": "]]
message.senderName = [parts objectAtIndex:0]
[parts removeObjectAtIndex:0]
message.text = [parts componentsJoinedByString:@": "]
int index = [dataModel addMessage:message]
if (updateUI)
[self.chatViewController didSaveMessage:message atIndex:index]
[message release]
}
我保证这是最后一点代码了。然我们解释一下这段代码。Message* message = [[Message alloc] init]
message.date = [NSDate date]
首先我们创建一个Message对象。我们会把推送信息的内容提取出来,填入到这个对象中然后将这个对象加入到DataModel中。NSString* alertValue = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"]
上面的代码从推送信息中获取了信息的内容。推送信息的JSON的格式看起来是这样的:{
"aps":
{
"alert": "SENDER_NAME: MESSAGE_TEXT",
"sound": "default"
},
}
服务器把信息内容以及信息作者的昵称放到了“alert”栏中。我们对这个字典中的其他内容并不感兴趣。NSMutableArray* parts = [NSMutableArray arrayWithArray:[alertValue componentsSeparatedByString:@": "]]
message.senderName = [parts objectAtIndex:0]
[parts removeObjectAtIndex:0]
message.text = [parts componentsJoinedByString:@": "]
上面的代码将发送者的昵称和信息内容分解出来放入到Message对象中。发送者昵称是分号和空格之前的字符串。int index = [dataModel addMessage:message]
现在我们可以把这个Message对象加入到DataModel中了。if (updateUI)
[self.chatViewController didSaveMessage:message atIndex:index]
最后,我们让ChatViewController加入这个新的信息。但是,如果推送信息是在didFinishLaunchingWithOptions函数中收到的,那我们就不能刷新这个视图,因为那时ChatViewController的表格还没有加载。视图加入这个信息会导致系统崩溃的。
就这些了。编译并运行现有的程序。用test_message.html中的表格来发送一些信息。你应该在app的聊天视图中看到这些信息气泡出现。自定义提示信息
你应该还记得我们之前在介绍推送信息时曾说过你可以自定义提示设置。比如你可以在有信息时播放一个自定义的提示音。我在app的resources文件夹中放了一个音频文件叫做beep.caf。
打开api.php文件并在makePayload()函数中将下面这行代码:$payload = '{"aps":{"alert":"' . $nameJson . ': ' . $textJson . '","sound":"default"}}'
改为:$payload = '{"aps":{"alert":"' . $nameJson . ': ' . $textJson . '","sound":"beep.caf"}}'
你不需要改变app本身的任何代码,甚至不用重新编译。但你还是应该在设备上关闭打开了的app。因为如果我们的app正在前台运行,那提示音是不会响的。现在用test_message.html给app发一个信息。当提示窗口出现时,提示音是不是不同了?
你也可以实验修改其他的选项。比如提供自定义按钮,或者给app设定数量小图标。(如果你想实验数量小图标,别忘了让app注册接收数量图标。现在我们的app只会有提示音和提示窗口。)
当你的iPhone收到推送信息后到底会发生什么呢?总共有三种可能性: app在前台运行. 接收到推送信息时屏幕上不会有任何显示,也不会有提示音,但你的appdelegate会收到这个推送信息。你可以在这里加入代码来处理接收到的信息。 app不在前台运行。...欢迎分享,转载请注明来源:夏雨云
评论列表(0条)