ネイティブC++コードでWindowsプッシュ通知を使用しようとしています。しかし、私は実装に苦労しています。私はCreatePushNotificationChannelForApplicationAsync
を呼んでいるが、それは私のOSはWin10と私は、Visual Studioここでは2015年ネイティブC++のCreatePushNotificationChannelForApplicationAsync
を使用 HRESULT_FROM_WIN32(ERROR_NOT_FOUND) : Element not found.
返すことは私のコードです:
#include <wrl.h>
#include <windows.networking.pushnotifications.h>
#include <ppltasks.h>
#pragma comment(lib, "runtimeobject.lib")
using namespace ABI::Windows::Foundation;
using namespace Microsoft::WRL;
using namespace Microsoft::WRL::Wrappers;
using namespace ABI::Windows::Networking::PushNotifications;
using namespace concurrency;
int main(char* argv[], int argc)
{
RoInitializeWrapper init(RO_INIT_MULTITHREADED);
if (FAILED(init))
return 0;
ComPtr<IPushNotificationChannelManagerStatics> channelManager;
HRESULT hr = GetActivationFactory(HStringReference(L"Windows.Networking.PushNotifications.PushNotificationChannelManager").Get(), &channelManager);
if (FAILED(hr))
return 0;
IAsyncOperation<PushNotificationChannel*>* asyncOp;
hr = channelManager->CreatePushNotificationChannelForApplicationAsync(&asyncOp); // return HRESULT_FROM_WIN32(ERROR_NOT_FOUND)
if (FAILED(hr))
return 0;
// create task to obtain uri from asyncOp
return 0;
}
一方、それはで非常に簡単ですWinRT。
namespace WnsPushAPI
{
public ref class WnsWrapper sealed
{
public:
void ObtainUri()
{
IAsyncOperation<PushNotificationChannel^>^ channelOperation = PushNotificationChannelManager::CreatePushNotificationChannelForApplicationAsync();
auto channelTask = create_task(channelOperation);
channelTask.then([this](PushNotificationChannel^ channel) {
// ... Save URI for latter use. channel->Uri->Data()
channel->PushNotificationReceived += ref new TypedEventHandler<PushNotificationChannel^, PushNotificationReceivedEventArgs^>(this, &WnsWrapper::OnNotify);
}, task_continuation_context::use_current());
}
void OnNotify(PushNotificationChannel^ sender, PushNotificationReceivedEventArgs^ e)
{
// do something
};
};
}
私はまた/d1ZWtokens
コンパイラスイッチで生成されたコードをチェックしますが、私は有益な何かを見つけることができませんでした。 ネイティブC++のプッシュ通知のドキュメントは実際にはあまり書かれていないので、ネイティブC++では見つからず、例も見つけられませんでした。
デスクトップアプリケーションにAppX IDを設定する方法が必要です。 C++/CXでUWPアプリを作成すると、このアイデンティティは 'Package.appxmanifest'で確認できます。私はこのアイデンティティを自分のアプリに移動する方法を見つけなければなりません。最後にC++/CXは.exeファイルだけですが、何とか登録されているか、win storeの有効なIDを含んでいます。 – elanius