2017-02-20 15 views
1

ネイティブ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++では見つからず、例も見つけられませんでした。

答えて

0

あなたのコードは大丈夫です。この問題は、Windowsストアアプリケーションからのプッシュ通知にのみ登録できるという事実にあります。あなたはデスクトップアプリケーションからそれを行うことはできません。エラーは、システムがあなたのAppXパッケージIDを見つけることができないという事実から来ています。

+0

デスクトップアプリケーションにAppX IDを設定する方法が必要です。 C++/CXでUWPアプリを作成すると、このアイデンティティは 'Package.appxmanifest'で確認できます。私はこのアイデンティティを自分のアプリに移動する方法を見つけなければなりません。最後にC++/CXは.exeファイルだけですが、何とか登録されているか、win storeの有効なIDを含んでいます。 – elanius

関連する問題