まずはこちら、Azureの通知ハブの使い方。
https://azure.microsoft.com/ja-jp/documentation/articles/notification-hubs-ios-get-started/
結構細かく書いていて、コピペでもイケるんじゃないかと思わせる。
ただ、問題点が2つある。さらに、Xcode7+iOS9でもうひとつ。
1.認証エラーになる
正直なところ「ここでエラーになるのか」と思うのだが、401エラーなのでしょうがない。
「通知を送信する」の段落にある6のコード。SAS認証トークン作成部分。
// Construct authorization token string token = [NSString stringWithFormat:@"SharedAccessSignature sr=%@&sig=%@&se=%qu&skn=%@", targetUri, signature, expires, HubSasKeyName];どうもここのパラメーターの並び順が違うようです。
srを一番最後にします。
// Construct authorization token string token = [NSString stringWithFormat:@"SharedAccessSignature sig=%@&se=%qu&skn=%@&sr=%@", signature, expires, HubSasKeyName, targetUri];正直謎です...
2.正常な場合のHTTPの応答コード
次はREST APIのメソッド、APNSネイティブ通知の送信です。
https://msdn.microsoft.com/ja-jp/library/azure/dn223266.aspx
ここにある正常な応答コードは「200」と書かれていますが、どうも「201」のようです。
同じく「通知を送信する」の段落にある7のコード。
// Send the REST request NSURLSessionDataTask* dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*) response; if (error || httpResponse.statusCode != 200) { NSLog(@"\nError status: %d\nError: %@", httpResponse.statusCode, error); } if (data != NULL) { xmlParser = [[NSXMLParser alloc] initWithData:data]; [xmlParser setDelegate:self]; [xmlParser parse]; } }];この中の「httpResponse.statusCode != 200」が「201」になるわけです。
// Send the REST request NSURLSessionDataTask* dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*) response; if (error || httpResponse.statusCode != 201) { NSLog(@"\nError status: %d\nError: %@", httpResponse.statusCode, error); } if (data != NULL) { xmlParser = [[NSXMLParser alloc] initWithData:data]; [xmlParser setDelegate:self]; [xmlParser parse]; } }];なお、通知ハブのPythonでのチュートリアルでは「201」になっているので、これが正しいんでしょうね。
https://azure.microsoft.com/ja-jp/documentation/articles/notification-hubs-python-backend-how-to/
3.Xcode7から「Enable Bitcode」がデフォルトでYESに
Bitcodeについて調べるとこちらの方がXcode7でのコンパイル方法をブログで解説しています。(助かりました!)
http://qiita.com/Takumi_Mori/items/ace01198c43c8bac6df0
WindowsAzureMessaging.frameworkが「ENABLE_BITCODE」のオプションに対応した形式でビルドされていないので、Xcodeの「Build Settings」の「Build Options」の「Enable Bitcode」をNOにしてね、ってことです。
それよりも、サンプルをswiftにしていただきたい、今日この頃です。
0 件のコメント:
コメントを投稿