簡體   English   中英

未收到GCM推送通知(全部通過)

[英]GCM push notification not received (gone through all)

在你指出它是重復之前,我知道這已被多次詢問,但似乎在新GCM(需要一個將播放服務項目作為庫包含)的啟動之后, 關於如何正確實現gcm的事情已經改變了代碼

由於我在清單中設置了<action android:name="com.google.android.c2dm.intent.REGISTRATION" /> ,但我的GCMIntentService.javaGcmBroadcastReceiver.java的斷點被注冊,但是斷點沒有得到當我從服務器發送推送時命中。 以下是您需要的所有內容:

相關的AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.aceast.waveindia"
    android:versionCode="1"
    android:versionName="waveindia1" >

    <uses-sdk
        android:minSdkVersion="9"
        android:targetSdkVersion="11" />

    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission
        android:name="com.aceast.waveindia.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />



 <!-- App receives GCM messages. -->
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <!-- GCM connects to Google Services. -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- GCM requires a Google account. -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <!-- Keeps the processor from sleeping when a message is received. -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />


        <receiver
            android:name=".GcmBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

                <category android:name="com.aceast.waveindia" />
            </intent-filter>
        </receiver>

        <service android:name=".GcmIntentService" />

GCMBroadcastReceiver.java

    public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            // Explicitly specify that GcmIntentService will handle the intent.
//breakpoint gets hit on register here...
            ComponentName comp = new ComponentName(context.getPackageName(),
                    GcmIntentService.class.getName());
            // Start the service, keeping the device awake while it is launching.
            startWakefulService(context, (intent.setComponent(comp)));
            setResultCode(Activity.RESULT_OK);
        }
    }

GCMIntentService的一部分,哪個斷點命中register

 @Override
    protected void onHandleIntent(Intent intent) {
        Bundle extras = intent.getExtras();
        GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
        // The getMessageType() intent parameter must be the intent you received
        // in your BroadcastReceiver.
        String messageType = gcm.getMessageType(intent);

觸發推送的.NET code

public string SendNotification()
    {

        var value = Message;
        WebRequest tRequest;
        tRequest = WebRequest.Create("https://android.googleapis.com/gcm/send");
        tRequest.Method = "post";
        tRequest.ContentType = " application/x-www-form-urlencoded;charset=UTF-8";
       // tRequest.ContentType = " application/json;charset=UTF-8";
        tRequest.Headers.Add(string.Format("Authorization: key={0}", GOOGLE_APPID));

        tRequest.Headers.Add(string.Format("Sender: id={0}", SENDER_ID));

        string postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.message=" + value + "&data.time=" + System.DateTime.Now.ToString() + "&registration_id=" + DeviceID + "";
        Console.WriteLine(postData);
        Byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        tRequest.ContentLength = byteArray.Length;

        Stream dataStream = tRequest.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();

        WebResponse tResponse = tRequest.GetResponse();

        dataStream = tResponse.GetResponseStream();

        StreamReader tReader = new StreamReader(dataStream);

        String sResponseFromServer = tReader.ReadToEnd();


        tReader.Close();
        dataStream.Close();
        tResponse.Close();
        return sResponseFromServer;
    }

本地防火牆已解鎖5228-5230端口

現在可以指出錯誤嗎?

我在你的清單中看到了一個問題:

<uses-permission
    android:name="com.aceast.waveindia.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />

應該 :

<permission android:name="com.aceast.waveindia.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.aceast.waveindia.permission.C2D_MESSAGE" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM