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

时间:2016-05-11 22:27:22

标签: ios xcode swift azure

我觉得我是宇宙中第一个试图让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。顺便说一下:当我开始玩它并为我工作时,我已经按照了天蓝色的订婚示例。但我现在需要的是网络/移动应用程序。那么,你的建议仍然适用于我的需要吗?

3 个答案:

答案 0 :(得分:1)

请你发一些代码吗?我想你可能在某个地方使用了错误的网址。

答案 1 :(得分:1)

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

修改应用程序代理部分中,确保创建到达模块,并且现有的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创建通知中心

enter image description here

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

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或类似的东西。

我希望这个详细的答案能为您节省数小时的时间。