来自IOS Xcode的Azure推送通知错误

我觉得我是宇宙中第一个尝试让Azure快速工作的人,在这方面帮助不大。 我遵循这个创build一个iOS应用程序 ,然后将推送通知添加到您的iOS应用程序 。 我应该能够从iPhone做一个成功的推送通知,但我得到这个错误。 顺便说一句:我可以让我的C#代码触发在我的电脑在Visual Studio(使用本教程 ),所以请求似乎工作,但响应糟透了。 任何人都知道如何解决它!

Error registering for notifications: Optional("Error Domain=com.Microsoft.MicrosoftAzureMobile.ErrorDomain Code=-1302 \"{\"message\":\"An error has occurred.\"}\" UserInfo={com.Microsoft.MicrosoftAzureMobile.ErrorRequestKey=<NSMutableURLRequest: 0x14cebf780> { URL: http://<mysite>.azurewebsites.net/push/installations/1E32E9B5-E976-4CCD-BD61-D026D3F4FF1C }, com.Microsoft.MicrosoftAzureMobile.ErrorResponseKey=<NSHTTPURLResponse: 0x14cec54b0> { URL: http://<mysite>.azurewebsites.net/push/installations/1E32E9B5-E976-4CCD-BD61-D026D3F4FF1C } { status code: 500, headers {\n \"Content-Length\" = 36;\n \"Content-Type\" = \"application/json; charset=utf-8\";\n Date = \"Wed, 11 May 2016 21:39:39 GMT\";\n Server = \"Microsoft-IIS/8.0\";\n \"Set-Cookie\" = \"ARRAffinity=8d79cd782ff16b44f7f280b76e2bc5564d86e0d1b228227b8e0033f4bb1c4582;Path=/;Domain=<mysite>.azurewebsites.net\";\n \"X-Powered-By\" = \"ASP.NET\";\n} }, NSLocalizedDescription={\"message\":\"An error has occurred.\"}}") 

更新#1唯一的url是每个教程。 其余的代码与我在链接中提到的代码相同(我将其逐个字符地复制):

 class ClientManager { static let sharedClient = MSClient(applicationURLString: "http://<mysite>.azurewebsites.net") } 

更新#2 @Pau Senabre我正在使用swift而不是Objective-C按照我的问题(请参阅我的标记下的问题),所以我没有一个.m文件每个步骤#1。 我也没有你提到的logErrorIfNotNil。 我的方法(在修改之前由Azure生成)看起来像这样:

 @IBAction func addItem(sender : AnyObject) { self.performSegueWithIdentifier("addItem", sender: self) } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { if segue.identifier == "addItem" { let todoController = segue.destinationViewController as! ToDoItemViewController todoController.delegate = self } } 

UPDATE#3 @Pau Senabre我的目标是做移动应用/服务,而不是移动互动。 看到这里的区别。 顺便说一句:当我开始玩它并为我工作时,我遵循了azure色的互动示例。 但我现在需要的是networking/移动应用程序。 那么,你提出的build议是否仍然适用于我的需要?

你可以请张贴一些代码吗? 我想你可能在某个地方使用了一个错误的URL。

更新#2检查以下链接: https : //github.com/Azure/azure-content/blob/master/articles/mobile-engagement/mobile-engagement-ios-swift-get-started.md

在“ 修改应用程序委托”一节中,确保创build一个到达模块,并且现有的参与初始化具有所有的初始值。

 EngagementAgent.init("Endpoint={YOUR_APP_COLLECTION.DOMAIN};SdkKey={YOUR_SDK_KEY};AppId={YOUR_APPID}", modulesArray:[reach]) 

错误代码提供的Error Domain=com.Microsoft.MicrosoftAzureMobile.ErrorDomain Code=-1302匹配一个错误的请求。 如果您正在input一些数据,请事先进行数据inputvalidation:

1在TodoService.m文件中,findaddItem方法search[self logErrorIfNotNil:error]; 代码行。 在该行代码的下面,用下面的代码replace完成块的其余部分,检查请求中是否有错误,并且错误代码是-1302,表示错误的请求:

 BOOL badRequest = ((error) && (error.code == -1302)); // detect text validation error from service. if (!badRequest) // The service responded appropriately { NSUInteger index = [itemscount]; [(NSMutableArray *)itemsinsertObject:result atIndex:index]; // Let the caller know that we finished completion(index); } 

2build立并运行; 您可以在Xcode输出窗口中看到处理错误的请求错误: 2012-10-23 22:01:32.169快速入门[5932:11303]错误错误域= com.Microsoft.WindowsAzureMobileServices.ErrorDomain代码= -1302 “文本长度必须小于10”UserInfo = 0x7193850 {NSLocalizedDescription =文本长度必须小于10,com.Microsoft.WindowsAzureMobileServices.ErrorResponseKey =,com.Microsoft.WindowsAzureMobileServices.ErrorRequestKey = https://task.azure-mobile.net/表/的TodoItem>}

3最后,在TodoService.m文件中findTodoService.m方法,该方法处理将错误logging到输出窗口。 在if代码块内, NSLog(@”ERROR %@”, error); 添加以下if块:

 // added to display description of bad request if (error.code == -1302){ UIAlertView *av = [[UIAlertView alloc] initWithTitle:@”Request Failed” message:error.localizedDescription delegate:nil cancelButtonTitle:@”OK” otherButtonTitles:nil ]; [av show]; } 

此外,请查看Azure安装程序中的以下步骤,也许您在某些时候丢失了某些内容: https : //azure.microsoft.com/zh-CN/documentation/articles/app-service-mobile-ios-get-started-推/

1创build一个通知中心

在这里输入图像说明

这会创build一个新的通知中心,并将其连接到您的移动应用程序。 如果您有现有的通知中心,则可以select将其连接到移动应用后端,而不是创build新的通知中心。

2注册应用程序推送通知

为您的应用注册一个应用ID。 创build一个明确的App ID(不是通配符App ID)和Bundle ID,使用Xcode quickstart项目中的确切Bundle ID。 推送通知选项也是至关重要的。

接下来,configuration推送通知。 您可以创build“开发”或“分发”SSL证书(请记住稍后在Azure门户中select相应的选项。)

3configurationAzure以发送推送通知

在Azure门户中,单击浏览All > App Services > your Mobile App backend > Settings > Mobile > Push > Apple Push Notification Services > Upload Certificate 。 上传.p12文件,select正确的模式(对应于您之前生成的客户端SSL证书是开发还是分发。)

4更新服务器项目以发送推送通知用以下代码replacePostTodoItem方法:

 public async Task<IHttpActionResult> PostTodoItem(TodoItem item) { TodoItem current = await InsertAsync(item); // Get the settings for the server project. HttpConfiguration config = this.Configuration; MobileAppSettingsDictionary settings = this.Configuration.GetMobileAppSettingsProvider().GetMobileAppSettings(); // Get the Notification Hubs credentials for the Mobile App. string notificationHubName = settings.NotificationHubName; string notificationHubConnection = settings .Connections[MobileAppSettingsKeys.NotificationHubConnectionString].ConnectionString; // Create a new Notification Hub client. NotificationHubClient hub = NotificationHubClient .CreateClientFromConnectionString(notificationHubConnection, notificationHubName); // iOS payload var appleNotificationPayload = "{\"aps\":{\"alert\":\"" + item.Text + "\"}}"; try { // Send the push notification and log the results. var result = await hub.SendAppleNativeNotificationAsync(appleNotificationPayload); // Write the success result to the logs. config.Services.GetTraceWriter().Info(result.State.ToString()); } catch (System.Exception ex) { // Write the failure result to the logs. config.Services.GetTraceWriter() .Error(ex.Message, null, "Push.SendAsync Error"); } return CreatedAtRoute("Tables", new { id = current.Id }, current); } 

这是我之前提出的另一个问题的正确答案,它解决了注册和接收推送通知。 我在这里说:

我终于能够收到昨晚的通知。 我继续前进,使用本教程重复了所有苹果端安装步骤的整个演练:使用Azure通知中心向iOS发送推送通知,然后使用以下方法将东西发送到Azure端:创build一个iOS应用程序并将推送通知添加到您的iOS应用程序 这照顾了设备的应用程序的注册成功,我可以在这个线程中使用AdrianHall的笔记来validation。 但这还不够。 Azure教程简短详细介绍了Xcode中所需的步骤,我在这里find了:[如何]在iOS中设置远程推送通知 – Swift 2.0 Code我不必在Xcode或类似的东西中设置任何“推送通知”。

我希望这个详细的答案可以节省你很多时间的挖掘。