11

मैं एक जीसीएम क्लाइंट बनाने की कोशिश कर रहा हूं, पंजीकरण ठीक है। मैं सर्वर से संदेशों को सफलतापूर्वक भेज रहा हूं। हालांकि, ग्राहक इरादा शुरू नहीं करता है। इसमें कहा गया हैGoogle क्लाउड मैसेजिंग रिसीवर का इरादा शुरू नहीं होता है (प्रसारण इरादा कॉलबैक: परिणाम = CentLED forIntent)

09-30 08: 39: 59.795: डब्ल्यू/GTalkService (4667): [DataMsgMgr] प्रसारण आशय कॉलबैक: परिणाम = रद्द forIntent {अधिनियम = com.google.android.c2dm.intent.RECEIVE बिल्ली (अतिरिक्त है) = [dol.framework]}

मेरे आशय

public class GCMService extends IntentService{ 

    public GCMService(String name) { 
     super("GCMService"); 
    } 

    protected void onHandleIntent(Intent intent) { 
     Bundle extras = intent.getExtras(); 
     String messageType = gcm.getMessageType(intent); 
     android.util.Log.i("hi","test"); 
     if (!extras.isEmpty()) { 

      if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) { 
       Logger.logInUI(tag, "Received: " + extras.toString()); 
      } 
     } 
     GCMReceiver.completeWakefulIntent(intent); 
    } 
} 

और मेरे रिसीवर

public class GCMReceiver extends WakefulBroadcastReceiver { 
    public void onReceive(Context context, Intent intent) { 
     ComponentName comp = new ComponentName(context.getPackageName(), 
       GCMService.class.getName()); 
     startWakefulService(context, (intent.setComponent(comp))); 
     Logger.log("hi","eetett"); 
     setResultCode(Activity.RESULT_OK); 
    } 
} 

और अंत में मेरा मैनिफेस्ट

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="dol.framework" 
    android:versionCode="1" 
    android:versionName="1.0" > 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

    <uses-permission android:name="android.permission.WAKE_LOCK" /> 

    <permission android:name="dol.framework.gcm.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 
    <uses-permission android:name="dol.framework.gcm.permission.C2D_MESSAGE" /> 


    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="18" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:name="dol.framework.widget.DolApplication" 
     android:label="Dol Framework" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="dol.framework.activity.DebugActivity" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="@string/app_name" 
      android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <receiver 
      android:name="dol.framework.GCMReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name="dol.framework" /> 
      </intent-filter> 
     </receiver> 

     <service android:name="dol.framework.GCMService"/> 
    </application> 

</manifest> 

टेक्स्ट की दीवार के लिए खेद है। जीसीएमएस सेवा और जीसीएम रिसीवर दोनों मेरे पैकेज (डॉल.फ्रेमवर्क) के शीर्ष पर हैं। मैं क्या गलत कर रहा हूं? उन लोगों के अलावा, मैं ज्यादा नहीं कर रहा हूं। केवल डिवाइस को पंजीकृत करना और फिर मैं इस डिवाइस पर एक संदेश भेज रहा हूं। लॉग शीर्ष पर संदेश प्रिंट करता है लेकिन कुछ भी नहीं करता है। क्या मुझे सेवा या कुछ शुरू नहीं करना चाहिए? मैंने उदाहरणों से संबंधित कुछ भी नहीं देखा।

+1

[यह संबंधित] (http://stackoverflow.com/questions/11902947/broadcast-intent-callback-result-cancelled-forintent) मदद कर सकता है। – jedwards

उत्तर

6

अनुमति आप परिभाषित और GCM के लिए इस्तेमाल आप dol.framework.gcm.permission है में। यह dol.framework.permission होना चाहिए, क्योंकि आपके ऐप का पैकेज dol.framework है।

+0

बहुत बहुत धन्यवाद! इसके बाद यह काम करता है (मैंने वास्तव में लॉग में अनुमतियों से संबंधित कुछ देखा लेकिन उपेक्षा की कि, मुझे घंटों की लागत नहीं है) – taytay

0

इस अपने मेनिफ़ेस्ट के रिसीवर बिट बदलने का प्रयास करें:

<receiver 
     android:name=".GCMReciever" 
     android:exported="true" 
     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" /> 
      <action android:name="dol.framework" /> 
     </intent-filter> 
    </receiver> 
+2

बस एक नोट, मैं जीसीएम (सी 2 डीएम नहीं) का उपयोग कर रहा हूं, और 'पंजीकरण' इरादे की आवश्यकता नहीं है ([मुझे यह भी लगता है कि यह 'रजिस्ट्रार' होना चाहिए, न कि 'पंजीकरण'] (https://developers.google .com/android/c2dm /)) – jedwards

+0

मुझे भी! जिस ऐप में मैं इस समय काम कर रहा हूं, उस मेनिफेस्ट में उस कोड के साथ काम कर रहा है। क्या आपके पास सही लाइब्रेरी सेट है (यानी पुराना नहीं)? – dlee

+0

नहीं, अभी भी काम नहीं कर रहा है :( – taytay

संबंधित मुद्दे