13

私は Android アプリケーションを開発しているだけでなく、そのための C# Web Api を書いています。これで、以下のコードを使用してプッシュ通知を送信できます。しかし、画像の URL を含む json オブジェクトを送信して、ユーザーが通知をクリックするとアプリ内のアクティビティが開き、その URL を使用すると Picasso を使用して画像が読み込まれるようにする必要があります。どうすればいいですか?

private void SendPushNotifications(int userId)
    {
        string appId = "myAppId";
        var request = WebRequest.Create("https://onesignal.com/api/v1/notifications") as HttpWebRequest;
        var user = db.Users.FirstOrDefault(x => x.Id == userId);
        if (user != null)
        {
            string message = "This job is posted by: \n" + user.Name + "\n" + user.Contact + "\n" +user.City;
            if (request != null)
            {
                request.KeepAlive = true;
                request.Method = "POST";
                request.ContentType = "application/json";

                request.Headers.Add("authorization", "Basic "+appId);

                byte[] byteArray = Encoding.UTF8.GetBytes("{"
                                                          + "\"app_id\": \"app_id\","
                                                          + "\"contents\": {\"en\": \""+ message +"\"},"
                                                          + "\"included_segments\": [\"All\"]}");

                string responseContent = null;

                try
                {
                    using (var writer = request.GetRequestStream())
                    {
                        writer.Write(byteArray, 0, byteArray.Length);
                    }

                    using (var response = request.GetResponse() as HttpWebResponse)
                    {
                        using (var reader = new StreamReader(response.GetResponseStream()))
                        {
                            responseContent = reader.ReadToEnd();
                        }
                    }
                }
                catch (WebException ex)
                {
                    System.Diagnostics.Debug.WriteLine(ex.Message);
                    System.Diagnostics.Debug.WriteLine(new StreamReader(ex.Response.GetResponseStream()).ReadToEnd());
                }

                if (responseContent != null) System.Diagnostics.Debug.WriteLine(responseContent);
            }
        }
    }

この「メッセージ」文字列を使用して、json オブジェクトも送信したいと考えています。

4

1 に答える 1

2

だから、私はこの問題の解決策を見つけました。

解決策: OneSignal では、以下のように送信するエンコードされた文字列で「データ」タグを使用して、追加のデータを送信できます。

byte[] byteArray = Encoding.UTF8.GetBytes("{"
             + "\"app_id\": \"app_id\","
             + "\"data\": {\"foo\": \"bear\"},"
             + "\"contents\": {\"en\": \"" + message + "\"},"
             + "\"included_segments\": [\"All\"]}");

したがって、Android では JsonObject additionalData にマップされます

OneSignal.startInit(this)
        .setNotificationOpenedHandler(new OneSignal.NotificationOpenedHandler() {
            @Override
            public void notificationOpened(String message, JSONObject additionalData, boolean isActive) {
                Toast.makeText(MainActivity.this,message,Toast.LENGTH_SHORT).show();
            }
        })
        .init();

そして、あなたはそれを簡単に使うことができます。:)

于 2018-09-19T07:14:20.573 に答える