我觉得我是宇宙中第一个试图让iOS迅速与Azure合作的人,没有多少帮助。 我跟着这个Create an iOS app 然后是Add Push Notifications to your iOS App。我应该能够从iPhone做一个成功的推送通知,但是我收到了这个错误。顺便说一句:我可以让我的C#代码在我的电脑中使用Visual Studio触发(使用此tutorial),因此请求似乎正在运行,但响应很糟糕。任何人都知道如何解决它!!
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 我唯一的网址是每个教程的网址。其余的代码与我在链接中提到的代码相同(我逐个字符地复制它):
class ClientManager {
static let sharedClient = MSClient(applicationURLString: "http://<mysite>.azurewebsites.net")
}
更新#2 @Pau Senabre我正在根据我的问题使用swift而不是Objective-C(请参阅我的标签),所以我的步骤#1没有.m文件。我也没有你提到的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
}
}
更新#3 @Pau Senabre我的目标是做移动应用/服务,而不是移动互动。查看差异here。顺便说一下:当我开始玩它并为我工作时,我已经按照了天蓝色的订婚示例。但我现在需要的是网络/移动应用程序。那么,你的建议仍然适用于我的需要吗?
答案 0 :(得分:1)
请你发一些代码吗?我想你可能在某个地方使用了错误的网址。
答案 1 :(得分:1)
在修改应用程序代理部分中,确保创建到达模块,并且现有的Engagement初始化具有所有初始值。
EngagementAgent.init("Endpoint={YOUR_APP_COLLECTION.DOMAIN};SdkKey={YOUR_SDK_KEY};AppId={YOUR_APPID}", modulesArray:[reach])
提供的错误代码Error Domain=com.Microsoft.MicrosoftAzureMobile.ErrorDomain Code=-1302
与错误请求匹配。如果要输入一些数据,请事先进行数据输入验证:
1 在TodoService.m文件中,找到[self logErrorIfNotNil:error]的addItem方法搜索;代码行。在该行代码下面,使用以下代码替换完成块的其余部分,该代码检查请求中是否存在错误以及错误代码是否为-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);
}
2 构建并运行;您可以在Xcode输出窗口中看到处理了来自服务的错误请求错误: 2012-10-23 22:01:32.169快速入门[5932:11303]错误错误域= com.Microsoft.WindowsAzureMobileServices.ErrorDomain代码= -1302“文本长度必须小于10”UserInfo = 0x7193850 {NSLocalizedDescription = Text length必须低于10,com.Microsoft.WindowsAzureMobileServices.ErrorResponseKey =,com.Microsoft.WindowsAzureMobileServices.ErrorRequestKey = https://task.azure-mobile.net/tables/TodoItem>}
3 最后,在TodoService.m
文件中,找到logErrorIfNotNil
方法,该方法处理将错误记录到输出窗口。在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/en-us/documentation/articles/app-service-mobile-ios-get-started-push/
1创建通知中心
这会创建一个新的通知中心并将其连接到您的移动应用。如果您有现有的通知中心,则可以选择将其连接到移动应用后端,而不是创建新的后端。
2注册推送通知的应用
为您的应用注册应用ID。创建一个显式的App ID(不是通配符App ID),对于Bundle ID,使用Xcode quickstart项目中的确切Bundle ID。检查“推送通知”选项也很重要。
接下来,配置推送通知。您可以创建“开发”或“分发”SSL证书(请记住稍后在Azure门户中选择相应的选项。)
3配置Azure以发送推送通知
在Azure门户中,单击“浏览All > App Services > your Mobile App backend > Settings > Mobile > Push > Apple Push Notification Services > Upload Certificate
”。上传.p12文件,选择正确的模式(对应于您之前生成的客户端SSL证书是开发还是分发。)
4更新服务器项目以发送推送通知
使用以下代码替换PostTodoItem
方法:
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);
}
答案 2 :(得分:0)
这是我之前提出的另一个问题的正确答案,它解决了两个问题:注册和接收推送通知。我在here中说了这个:
我终于能够在昨晚收到通知。我继续使用本教程重新编写了所有苹果端安装步骤:使用Azure通知中心向iOS发送推送通知,然后使用此方法进行天蓝色的操作:创建iOS应用程序并将推送通知添加到您的iOS应用程序这照顾了成功注册设备的应用程序,我可以在这个帖子中使用AdrianHall的注释进行验证。但这还不够。 Azure教程没有详细说明Xcode所需的步骤,我在这里找到了:[如何]在iOS中设置远程推送通知 - Swift 2.0代码我没有设置任何&#34;推送通知&#34;在Xcode或类似的东西。
我希望这个详细的答案能为您节省数小时的时间。